从另一个表映射Hibernate值仅用于演示

时间:2014-01-09 21:50:33

标签: hibernate

我无法通过搜索找到这个确切的场景......

我有一个场景,我有2个实体。

第一个存储一些基本信息:

表:TABLE_A ID,AccountId,FirstName,LastName

现在,我在表格中存储了帐户ID,但我想简单地获取帐户名称 无需在第一个类中添加Account实体... hibernate是否能够从Account表中查找值并将其存储在TABLE_A类的(例如)String accountName字段中?这只是用于显示一列......或者是将实体添加到此类并加载它的理想方式?

3 个答案:

答案 0 :(得分:2)

您可以拥有以下内容:

private String accountName;

@Formula("(select acc.account_name from tb_account acc where acc.id = account_id)")
public String getAccountName() {
    return accountName;
}

public void setAccountName(String accountName) {
    this.accountName = accountName;
}

在你的主实体中,现在你不需要映射关联,Hibernate每次获取主实体的实例时都会获取account_name

顺便说一下有一些缺点,Hibernate在select子句中使用嵌套查询来获取accountName,因此accountName上的过滤和排序效果不佳,有没有什么好的理由不是使用简单的关联?

答案 1 :(得分:1)

我强烈建议您创建Account实体,即使是具有帐户ID和帐户名称的非常​​简单的实体。

但是如果你坚持不这样做,你可以采取一些替代方案。

  1. "More Complex Associate Mapping"所述,您可以使用子选择来获取帐户名称

  2. 您可以考虑在DB中创建一个包含该额外列的View,而不是映射到实际表。这应该让你在Hibernate中的生活更加轻松

  3. 如果它仅用于显示而不是打算成为实体的一部分(这意味着,该帐户名称不是域逻辑的一部分),我建议您将您的关注分开使用您的域模型设计进行演示。与帐户建立适当的关联,并考虑执行select new FooDisplayInfo(foo, foo.account.name) from Foo foo where blablabla

  4. 之类的操作

答案 2 :(得分:0)

您可以在表示TABLE_A表的实体中创建与Account表的关联,并使用以下查询获取帐户名称:

SELECT a.account.name FROM TableA a WHERE...

这将只获取帐户名称,而不是整个帐户行。