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



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

有一个场景,我有 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和帐户名称的非常简单的实体。

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

  1. 如"更复杂的关联映射"中所述,您可以使用子选择来获取帐户名称

  2. 您可以考虑在数据库中创建一个视图,而不是映射到实际表,其中包括该额外列。 这应该会让你在Hibernate的生活更轻松

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

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

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

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

最新更新