【发布时间】:2018-05-03 07:56:21
【问题描述】:
我刚开始使用 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,但不是更新数据,这些方法每次都插入一个新行。 请帮帮我。
谢谢,
【问题讨论】:
-
您的第一个服务只是插入基本信息,因此不会在 UserAdvancedInfo 中插入任何行。对吗?
-
是的!正确的@YogeshHShenoy
-
因此,当您使用第二个服务时,UserAdvanceInfo 将有一个新行和 UserBasicInfo 表,UserAdvanceInfo 的新 id 将被更新。您的问题是 UserBasicInfo 表中有一个新条目?是吗?
-
不,问题是 UserAdvanceInfo 表中有一个新条目。
-
我没有在 UserBasicInfo 中更新 UserAdvanceInfo 的 id。
标签: java hibernate spring-mvc spring-data-jpa hibernate-mapping