我刚刚开始使用hibernate 4(注释),我有三个模型类,一对一和一对多的关系。
@Entity
@Table(name = "USERS",uniqueConstraints = {@UniqueConstraint(columnNames={"EMAIL_ID"})})
public class UserBasicInfo implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="userId")
private Long userId;
@Column(name="EMAIL_ID")
private String emailId;
@Column(name="PASSWORD")
private String password;
@OneToMany(fetch = FetchType.LAZY, mappedBy="userBasicInfo",cascade = CascadeType.ALL)
private Set<UserDeviceInfo> userDeviceInfo;
@OneToOne(mappedBy="userBasicInfo",cascade = CascadeType.ALL)
private UserAdvancedInfo userAdvancedInfo;
///////// Getter setters
}
和
@Entity
@Table(name = "USERS_ADVANCED_DETAILS")
public class UserAdvancedInfo implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ADVANCED_INFO_ID")
private Integer advancedInfoId;
@Column(name="GENDER")
private Gender gender;
@Column(name="UNIT_OF_MEASUREMENT")
private UnitOfMeasurement unitOfMeasurement;
@Column(name="HEIGHT")
private Double height;
@OneToOne
@JoinColumn(name="userId", insertable = true, updatable = true, nullable = true)
private UserBasicInfo userBasicInfo;
//////////////////////// Getter and Setter ////////////////////////
}
在上述模型类的基础上,我有两个不同的REST API。 在第一个API中,只插入基本信息,并且工作正常。
但在第二个API中,我必须根据UserBasicInfo的主键更新On UserAdvancedInfo。 我使用了update,merge,saveOrUpdate,但不是更新数据,而是每次都插入一个新行的所有方法。 请帮助我。
谢谢,
答案 0 :(得分:0)
要更新实体,您需要将主键设置为UserAdvancedInfo对象,并使用UserAdvancedInfo对象的主键设置UserBasicInfo对象:
UserAdvancedInfo info = new UserAdvancedInfo();
UserBasicInfo userInfo =new UserBasicInfo();
info.setUserBasicInfo(userInfo);
Hibernate检查主键是否有更新。