java - 是否可以在不定义任何关联的情况下映射实体中的字段?

标签 java hibernate mapping

我在数据库中有以下模式(简化)

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 解决它

这种方法有两个可能的缺点:

  1. 这是特定于 hibernate 的代码
  2. 这是纯 SQL,因此可能是特定于数据库的

HTH

[1]: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-property hibernate 文档

关于java - 是否可以在不定义任何关联的情况下映射实体中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518266/

相关文章:

java - 从 java 文档中删除 html 标签的最快方法是什么?

java - beans绑定(bind)有什么问题

ios - 在 AlamofireObjectMapper 响应中映射 allHeaderFields

c# - 如何在 EF 4.1 中将属性映射为 NOT 列

java - 在自定义实现中包装 Hibernate PersistentSet 的正确方法?

javascript - 如何将数组中的对象转换为特定格式

java - spring 中的 validator 应该访问数据库吗?

java - 替代查询以加入两个单独的查询

java - 错误的 hibernate 列类型 : Found: undefined

json - 在 Hibernate/Postgres/JSON 中转义冒号 ":"