[英]Issue with One to One Mapping in 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的主键更新OnUserAdvancedInfo。 我使用过update,merge,saveOrUpdate,但是所有这些方法每次都在新行中插入而不是更新数据。 请帮我。
谢谢,
要更新实体,您需要将主键设置为UserAdvancedInfo对象,并将UserBasicInfo对象设置为主键为UserAdvancedInfo对象:
UserAdvancedInfo info = new UserAdvancedInfo(); UserBasicInfo userInfo =new UserBasicInfo(); info.setUserBasicInfo(userInfo);
Hibernate检查更新的主键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.