繁体   English   中英

Hibernate中的一对一映射问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM