在Spring Data JPA中禁用自动更新

时间:2018-08-02 11:31:52

标签: java mysql spring-boot spring-data-jpa

我有一个JPA @Entity类。我使用jpa的findBy方法之一检索实体,JPA认为该实体位于persistent state中,然后更新实体中的某些字段,然后传递实体进行验证。如果验证失败,则不更新,如果验证成功,则保留实体。

这是此流程的主要问题:因为我更新了要在验证中使用的实体,所以我是否调用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 个答案:

答案 0 :(得分:0)

我看到两个选择:

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

    请确保您使用适当的级联批注,或手动遍历所有需要分离的实体。

  2. 以分离模式进行整个更新和验证,即以无@Transactional批注的方法进行。这样,只有在您明确调用保存时,信息才会被存储。

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