mdo*_*oud 7 java mapping hibernate
我在DB中有以下架构(简化)
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
)
Run Code Online (Sandbox Code Playgroud)
我问是否有任何方法可以为主表定义我的实体,以便直接使用其他表中的标签,即不为这些其他表定义实体.
我无法更改数据库架构,这非常糟糕(在多个表中定义了标签/代码耦合,在多个表中定义).如果有可能,这个解决方案将允许我的代码简单,因为我真的不需要这些其他实体.
我猜它会产生类似的结果:
@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;
}
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
Mop*_*per 12
另一种可能性是使用@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;
}
Run Code Online (Sandbox Code Playgroud)
在[Hibernate docs] [1]中几乎没有关于此的信息,因此您可能需要一些试验和错误才能使其正确(但您应该可以使用它来完成它)hibernate.show_sql=true.
这种方法有两个可能的缺点:
HTH
[1]:http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-property hibernate docs
| 归档时间: |
|
| 查看次数: |
10693 次 |
| 最近记录: |