我在数据库中有以下模式(简化)
MainTable(
ID primary key
SOMEFIELD
CODE_FK1 -- references OtherTable1 CODE (without declared foreign key)
CODE_FK2 -- references OtherTable2 CODE (without declared foreign key)
... Other fields used
)
OtherTable1(
CODE primary key
LABEL
... other fields not used
)
OtherTable2(
CODE primary key
LABEL
... other fields not used
)
我问是否有任何方法为主表定义我的实体,以便直接使用其他表中的标签,即无需为这些其他表定义实体。
我无法更改数据库模式,这真的很糟糕(到处都有标签/代码对,在多个表中定义)。
如果可能的话,这个解决方案将允许我的代码保持简单,因为我真的不需要这些其他实体。
我想这会导致类似的结果:
@Entity
public class MainEntity{
@Id
private Integer ID;
@Column(name="SOMEFIELD")
private String SomeField;
@SomeAnnotation to Join CODE_FK_1 with OtherTable1.CODE
@SomeAnnotation like @Column(name="LABEL", table="OtherTable1")
private String Label1;
@SomeAnnotation to Join CODE_FK_1 with OtherTable1.CODE
@SomeAnnotation like @Column(name="LABEL", table="OtherTable1")
private String Label1;
}
预先感谢您的帮助!
另一种可能性是使用@Formula
注释从另一个表中获取值。每当您加载实体时,这都会自动生成一个子选择。
我想你会需要这样的东西:
@Entity
public class MainEntity{
@Id
private Integer ID;
@Column(name="SOMEFIELD")
private String SomeField;
@Formula("(SELECT ot1.LABEL FROM OtherTable1 ot1 WHERE ot1.CODE = CODE_FK_1)")
private String Label1;
}
[Hibernate 文档][1] 中关于此的信息很少,因此您可能需要一些尝试和错误才能得到正确的结果(但您应该能够使用hibernate.show_sql=true
.
这种方法有两个可能的缺点:
- 这是 hibernate 特定的代码
- 这是普通的 SQL,因此可能是特定于数据库的
HTH
[1]: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-property http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-property休眠文档
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)