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