OnetoOne映射问题

时间:2014-01-13 21:37:04

标签: java hibernate jpa

我有两个表Location和LocationCode,如下所述

Relationship of the tables

'code'列是locationCode表的FK。

以下是映射文件

locationCode.java

@Entity
@Table(name="locationCode")
public class locationCodeNode {
    @Id
    @Column(name="code")
    public String code;
    @Column(name="description")
    public String description;
}

locationNode.java

@Entity
@Table(name="location")
public class locationNode {

    @Id
    @Column(name="ID")
    public String id;

    @Column(name="value1")
    public String value1;

    @OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
    @JoinColumn(name="code",insertable=false,updatable=false,nullable=true)
    public locationCode code;
}

在某个服务中的某些地方,我正在尝试将location表中的'code'值设置为locationCode表中的一行**(locationCode表中的值不会更改,是域名值)**

//fetch of hibernate this will not have code assigned to it yet
location location = locationDao.findById(20);

locationCode code = codeDao.findById(3);
location.setCode(code);

locationDao.saveOrUpdate(code);

//commit session.

位置表中代码的值不会改变。

问题是,我正在为hibernate映射做得对吗?代码有什么问题吗?

2 个答案:

答案 0 :(得分:1)

尝试删除

 insertable=false,updatable=false

从代码字段joincolumn定义

答案 1 :(得分:0)

您应该将locationCodeNode作为locationNode上的属性。

@Entity
@Table(name="location")
public class locationNode {

    @Id
    @Column(name="ID")
    public String id;

    @Column(name="value1")
    public String value1;

    @OneToOne
    public locationCodeNode code;
}