【发布时间】:2019-01-10 03:54:49
【问题描述】:
我有一个 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;
}
【问题讨论】:
-
看不到你的代码(尤其是涉及到的JPA实体+事务分界相关的类),没人能帮你。
-
你不能在实体上使用 bean 验证注释吗? baeldung.com/javax-validation
-
你可以通过它的 id 重新加载实体...
-
您需要自己分离实体或确保它被分离。这真的是你的错,你不应该首先修改具有潜在无效值的实体。
-
@Kayaman 我必须更新用户详细信息。如果
emailId发生更改,那么我应该将新的详细信息保存在单独的表中,否则我需要保留。为此,我必须获取实体类,然后对其进行更新。否则,我会得到重复的代码
标签: java mysql spring-boot spring-data-jpa