我无法通过搜索找到这个确切的场景......
我有一个场景,我有2个实体。
第一个存储一些基本信息:
表:TABLE_A ID,AccountId,FirstName,LastName
现在,我在表格中存储了帐户ID,但我想简单地获取帐户名称 无需在第一个类中添加Account实体... hibernate是否能够从Account表中查找值并将其存储在TABLE_A类的(例如)String accountName字段中?这只是用于显示一列......或者是将实体添加到此类并加载它的理想方式?
答案 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和帐户名称的非常简单的实体。
但是如果你坚持不这样做,你可以采取一些替代方案。
如"More Complex Associate Mapping"所述,您可以使用子选择来获取帐户名称
您可以考虑在DB中创建一个包含该额外列的View,而不是映射到实际表。这应该让你在Hibernate中的生活更加轻松
如果它仅用于显示而不是打算成为实体的一部分(这意味着,该帐户名称不是域逻辑的一部分),我建议您将您的关注分开使用您的域模型设计进行演示。与帐户建立适当的关联,并考虑执行select new FooDisplayInfo(foo, foo.account.name) from Foo foo where blablabla
答案 2 :(得分:0)
您可以在表示TABLE_A表的实体中创建与Account表的关联,并使用以下查询获取帐户名称:
SELECT a.account.name FROM TableA a WHERE...
这将只获取帐户名称,而不是整个帐户行。