Java 使用@Where子句休眠@OneToOne映射

Java 使用@Where子句休眠@OneToOne映射,java,hibernate,hibernate-mapping,hibernate-annotations,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\u id是当前对象的id,而type\u name是OBJECTIVE 我无法

这样行吗-

@OneToOne()
@JoinColumn(name = "id", referencedColumnName = "type_id")
@Where(clause = "type_name = OBJECTIVE")
public NoteEntity getObjectiveNote() {
  return objectiveNote;
}
这就是我试图做的-从表
note
中获取记录,其
type\u id
是当前对象的
id
,而
type\u name
OBJECTIVE


我无法使上述映射正常工作。我做错了什么?

这个简单的方法不起作用,对不起:(你需要以一对多的方式来做,只需要一个元素就可以得到一个集合


如果您真的希望它以这种方式工作,您可以欺骗hibernate,将外键ID和type_名称存储在联接表中,并告诉它这两列构成外键。

实际上,您可以通过指定
@OneToOne
而不指定任何
@Where
,但将
@Where
放在引用的表上来实现这一点实体类。我在Hibernate 4.3.11上对此进行了测试

如果您不关心与您的
@Where
不匹配的任何实体对象,则可以使用此方法


如果您确实关心其他实体,您可能可以创建一个子类实体,将
@Where
放在其上并加入该子类。但我尚未测试此场景。

“目标”它是常量还是属性?您需要显示
NoteEntity
。此外,请尝试配置
true
,以查看SQL中的内容。确定,方法?选项#2@Affe我可以通过将对象更改为列表并执行onetomany(即使设计是onetoone)来确认第一个选项,然后获得单个元素就可以了。谢谢