从另一个表映射Hibernate值仅用于演示
我无法通过搜索找到这个确切的场景....
我有一个场景,我有2个实体。
第一个存储一些基本信息:
表:TABLE_A ID,AccountId,FirstName,LastName
现在,我在表中存储帐户ID,但是我只想简单地获取帐户名称,而无需在此第一个类中添加帐户实体...... hibernate是否有能力从帐户表中查找值并将其存储在一个(例如)TABLE_A类中的String accountName字段? 这只是为了显示一列......或者是将实体添加到此类并加载它的理想方式?
我强烈建议你创建一个Account
实体,即使是一个非常简单的Account
实体,账户名和账户名。
但是,如果你坚持不这样做,你可以选择一些替代品。
如“更复杂的关联映射”中所述,您可以使用子选择来获取帐户名称
您可以考虑在数据库中创建一个包含该额外列的视图,而不是映射到实际表格。 这应该会让你在Hibernate中的生活变得更容易
如果仅用于显示,而不是打算成为实体的一部分(即,该帐户名称不打算成为域逻辑的一部分),那么我会建议您将演示文稿的关注与您的域模型设计分开。 有一个适当的关联帐户,并考虑做一些像select new FooDisplayInfo(foo, foo.account.name) from Foo foo where blablabla
你可以有这样的东西:
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
进行过滤和排序将不会很好,是否有任何理由不使用简单的关联?
您可以在代表TABLE_A表的实体中创建与帐户表的关联,并使用以下查询获取帐户名称:
SELECT a.account.name FROM TableA a WHERE...
这将仅提取帐户名称,而不是整个帐户行。
链接地址: http://www.djcxy.com/p/37097.html上一篇: Mapping Hibernate value from another table for presentation only
下一篇: Getting the database column name from the property of a grails domain