Hibernate中的一对一映射问题?

时间:2017-11-20 06:33:01

标签: java hibernate spring-mvc spring-data-jpa hibernate-mapping

我刚刚开始使用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,但不是更新数据,而是每次都插入一个新行的所有方法。 请帮助我。

谢谢,

1 个答案:

答案 0 :(得分:0)

要更新实体,您需要将主键设置为UserAdvancedInfo对象,并使用UserAdvancedInfo对象的主键设置UserBasicInfo对象:

UserAdvancedInfo info = new UserAdvancedInfo();
UserBasicInfo userInfo =new UserBasicInfo();
info.setUserBasicInfo(userInfo);

Hibernate检查主键是否有更新。