2014-01-09 50 views
1

我無法通過搜索找到此確切場景....從另一個表映射休眠值僅用於演示文稿

我有一個場景,其中有2個實體。

的第一家門店的一些基本信息:

表:TABLE_A ID,帳戶ID,名字,姓氏

現在,我保存的帳號ID,在餐桌上,但我想簡單地獲取帳戶名稱 而不必在第一個類中添加Account實體...... hibernate是否有能力從Account表中查找值並將其存儲在TABLE_A類的(例如)String accountName字段中?這只是爲了顯示一列......或者是將實體添加到此類並加載它的理想方式?

回答

1

我強烈建議您創建Account實體,即使是一個非常簡單的帳戶ID和帳戶名稱。

但是,如果你堅持不這樣做,你可以採取一些選擇。

  1. "More Complex Associate Mapping"描述的那樣,你可以使用子查詢來獲取賬戶名

  2. 不是映射到實際表,你可以考慮建立在數據庫視圖,其中包括額外的列。這應該會讓你在Hibernate中的生活變得更容易

  3. 如果它僅用於顯示而不是意圖成爲實體的一部分(也就是說,該帳戶名不是要成爲域邏輯的一部分),我會建議您將演示文稿的關注與您的域模型設計分開。有一個適當的協會賬戶,並考慮做類似select new FooDisplayInfo(foo, foo.account.name) from Foo foo where blablabla

0

你可以創建一個有代表TABLE_A表的實體賬戶表的關聯,並與像一個查詢中獲取的帳戶名稱:

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

這將只獲取賬戶名,而不是整個帳戶行。

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不會表現良好,是有什麼好的理由不使用一個簡單的聯想?