gpt4 book ai didi

java - 在 spring data jpa 中禁用自动更新

转载 作者:行者123 更新时间:2023-11-29 17:15:34 41 4
gpt4 key购买 nike

我有一个 JPA @Entity 类。我使用 jpa 的 findBy 方法之一检索实体,该方法将被 JPA 视为处于持久状态,然后更新一些实体中的字段,然后将实体传递给验证。如果验证失败,则不更新,如果验证成功,则保留实体。

这是此流程的主要问题:因为我更新了要在验证中使用的实体,所以无论我是否调用 save(),记录都将始终更新因为 JPA 检测到实体已更改并将其标记为更新。

如何避免这种行为?

我的实体类

@Entity
@Table( name = "user" )
@Data
@EqualsAndHashCode( of = { "id" } )
@ToString( of = { "id" } )
public class UserModel {

@Id
@GeneratedValue( strategy = GenerationType.AUTO )
@Column( name = "u_id" )
private Long id;

@Column( name = "u_first_name" )
private String firstName;

@Column( name = "u_last_name" )
private String lastName;

@Column( name = "u_email_id" )
private String emailId;

@Column( name = "u_password" )
private String password;

@Column( name = "u_mobile_number" )
private String mobileNumber;

@Column( name = "u_created_at" )
private Calendar createdAt;

@Column( name = "u_is_active" )
private Boolean isActive;
}

最佳答案

我看到两个选项:

  1. 当验证失败时,将实体与 EntityManager 分离。

    确保使用适当的级联注释或手动迭代所有需要分离的实体。

  2. 以分离模式进行整个更新和验证,即在没有 @Transactional 注释的方法中。这样,只有当您显式调用 save 时,信息才会被存储。

    这可能有点简单,但缺点是需要两次加载所有受影响的实体。

关于java - 在 spring data jpa 中禁用自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51652565/

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