Hibernate @OneToOne Mapping

时间:2014-10-31 12:13:21

标签: hibernate jboss6.x hibernate3

我有以下代码..

  1. 工作正常(staffTbl没有得到懒惰的提取) @OneToOne(fetch=FetchType.LAZY) @JoinColumns({@javax.persistence.JoinColumn(name="inst_id", referencedColumnName="inst_id", insertable=false, updatable=false), @javax.persistence.JoinColumn(name="staff_id", referencedColumnName="staff_id", insertable=false, updatable=false)}) private StaffTbl staffTbl;

  2. 但是当我做这个瞬态时它始终取出null: @OneToOne(fetch=FetchType.LAZY) @JoinColumns({@javax.persistence.JoinColumn(name="inst_id", referencedColumnName="inst_id", insertable=false, updatable=false), @javax.persistence.JoinColumn(name="staff_id", referencedColumnName="staff_id", insertable=false, updatable=false)}) private transient StaffTbl staffTbl;

  3. 有什么错吗?

    (我使用Hibernate 3,使用JBoss 6.1)

2 个答案:

答案 0 :(得分:1)

  

有任何错误吗?

如果某个字段标记为瞬态,则表示它们不属于该实体的持久状态。

<强>解决方案

更改为:

private StaffTbl staffTbl;

答案 1 :(得分:0)

transient作为java关键字意味着在对象序列化时应忽略此字段,因此您可能会看到此效果。问题是你想要实现什么目标?

如果你打算在Hibernate的上下文中将staffTbl标记为瞬态,你应该用@Transient注释它,但是你必须设置它的值,因为它赢了来自数据库,您可以期待更多的空值。