gpt4 book ai didi

java - Spring 数据JPA : update a list of Entity using a list of input in a custom Query

转载 作者:行者123 更新时间:2023-12-02 08:46:21 25 4
gpt4 key购买 nike

我有以下基本对象:

/* User class */

import lombok.Data;
import lombok.AllArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id
import javax.persistence.GeneratedValue;
import javax.persistence.ManyToOne;

@Data
@Entity
@AllArgsConstructor
public class User {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

private String name;
private String surname;

@ManyToOne
private Address address;
}

/* UserComposite class, used to load partial data from a user */

import lombok.Data;
import lombok.AllArgsConstructor;

@Data
@AllArgsConstructor
public class UserComposite {

private Long userId;
private String name;
private String surname;
}

我的目标是使用 UserComposite 列表作为输入来更新用户列表。这是我的 DAO 的样子:

/* UserDao class */    

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

public interface UserDao extends JpaRepository<User, Long> {

@Transactional
@Modifying
@Query("update User u set u.name = uc.name , "
+ "u.surname = uc.surname "
+ "where u.id = uc.userId "
+ "and UserComposite uc in (?1)")
void updateUserFromCompositeList(List<UserComposite> userCompositeList);
}

但是,这不起作用。我很难将输入中的数据与数据库中保存的数据进行匹配,特别是因为 UserComposite 不是实体。

有办法解决这个问题吗?

最佳答案

不可能在一个查询中使用不同的 ID 值更新多行。

按 ID 更新每个用户

for (UserComposite user : List<UserComposite> userCompositeList) {
userDao.updateUser(user.getUserId(), user.getName(), user.getSurname());
}

存储库查询如

  @Modifying
@Query("UPDATE User u SET u.name = :name, u.surname = :surname WHERE u.id = :userId")
void updateUser(@Param("userId") int userId, @Param("name") String name, @Param("surname") String surname);

关于java - Spring 数据JPA : update a list of Entity using a list of input in a custom Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61056840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com