我无法通过搜索找到这个确切的场景......
我有一个场景,我有 2 个实体。
第一个存储一些基本信息:
表:TABLE_AID、帐户 ID、名字、姓氏
现在,我将帐户 ID 存储在表中,但我想简单地获取帐户名称无需在第一个类中添加帐户实体...休眠是否能够从"帐户"表中查找值并将其存储在类TABLE_A(例如)字符串"帐户名"字段中?这仅用于显示一列...还是将实体添加到此类并加载它的理想方法?
你可以有这样的东西:
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在你的选择子句中使用嵌套查询来获取accountName
,所以对accountName
进行过滤和排序不会很好地执行,有什么很好的理由不使用简单的关联吗?
我强烈建议您创建该Account
实体,即使是具有帐户ID和帐户名称的非常简单的实体。
但是,如果您坚持不这样做,则可以采取一些替代方案。
-
如"更复杂的关联映射"中所述,您可以使用子选择来获取帐户名称
-
您可以考虑在数据库中创建一个视图,而不是映射到实际表,其中包括该额外列。 这应该会让你在Hibernate的生活更轻松
-
如果它仅用于显示而不是旨在成为实体的一部分(也就是说,该帐户名称不打算成为域逻辑的一部分),我建议您将演示文稿的关注点与域模型设计分开。 与客户建立适当的关联,并考虑执行类似
select new FooDisplayInfo(foo, foo.account.name) from Foo foo where blablabla
可以在表示TABLE_A表的实体中创建与 Account 表的关联,并使用如下所示的查询获取帐户名称:
SELECT a.account.name FROM TableA a WHERE...
这将仅获取帐户名称,而不是整个帐户行。