我有两个表Location和LocationCode,如下所述
'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映射做得对吗?代码有什么问题吗?
答案 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;
}