禁用spring数据jpa中的自动更新

vmpqdwk3  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(546)

我有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;
}
8yparm6h

8yparm6h1#

我看到两种选择:
当验证失败时,将实体从 EntityManager .
确保使用适当的级联注解或手动遍历所有需要分离的实体。
在分离模式下进行整个更新和验证,即在没有 @Transactional 注解。只有在显式调用save时,信息才会被存储。
这可能有点简单,但有一个缺点是加载所有受影响的实体两次。

相关问题