使用@Where子句进行Hibernate @OneToOne映射

时间:2010-12-08 00:20:06

标签: java hibernate hibernate-mapping hibernate-annotations

这会起作用 -

@OneToOne()
@JoinColumn(name = "id", referencedColumnName = "type_id")
@Where(clause = "type_name = OBJECTIVE")
public NoteEntity getObjectiveNote() {
  return objectiveNote;
}

这就是我要做的 - 从表note获取记录type_id是当前对象的idtype_nameOBJECTIVE }。

我无法使上述映射生效。我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

这只是简单的不起作用,对不起:(你需要做到一对一,并且只需要使用单个元素获得一个集合。

如果你真的希望它以这种方式工作,你可以通过在连接表中存储外键ID和type_name并告诉它两个列构成外键来欺骗休眠。

答案 1 :(得分:1)

实际上,您可以通过指定@OneToOne而不指定@Where来实现此目的,但将@Where放在引用的实体类上。我在Hibernate 4.3.11上测试了这个。

如果您不关心与@Where不匹配的任何实体对象,则此方法有效。

如果您关心其他实体,您可以创建一个子类实体,在其上放置@Where并加入该子类。但我没有测试过这种情况。

相关问题