从另一个表映射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