2011-11-17 74 views
0

我有兩個實體CustomerAccountJPA原生查詢(SQL視圖)

@Entity 
@Table(name="customer") 
public class Customer 
{ 
    private Long id; 
    private String name; 
    private Long accountId; 
    private String accountType; 
    private String accountName; 

    ... 
} 

@Entity 
@Table(name="account") 
public class Account 
{ 
    private Long id; 
    private String accountName; 
    private String accountType; 
    ... 
} 

我有一個SQL查詢:

select 
    a.id as account_id, 
    a.account_name, 
    a.account_type, 
    d.id, 
    d.name 
from account a, 
    customer d` 
where d.account_id = a.id 

假設在應用程序啓動

  1. accountcustomer表在數據庫中創建。
  2. accountTypeaccountName客戶實體的字段不應該在數據庫中創建。也就是說,客戶數據庫表中將只創建idname列。

問題

如何運行上面的SQL查詢,並與accountTypeaccountName性填充了SQL查詢的ACCOUNT_NAME和ACCOUNT_TYPE值返回Customer實體。

+0

你可以去休眠嗎? – ssedano

+0

我真的不明白你的問題。這些「假設」是什麼?這是你想如何工作的代碼?你不想堅持Customer實體的'accountType'和'accountName'屬性? ('@ Transient'?)你想讓這些屬性成爲組合PK的一部分嗎?客戶和賬戶之間的關係是什麼?你的SQL查詢將返回這種形式的笛卡爾產品(這些實體之間沒有關聯)... –

+0

accountType和accountName不是複合Pk,我使用id作爲主鍵。我已更新該帖子。就像你說的那樣,Customer實體的accountType和accountName屬性是@Transient。客戶實體具有對賬戶實體的引用。我想從數據庫中檢索客戶實體,該客戶實體不包含帳戶實體,但包含其在數據庫中引用的帳戶記錄的帳戶類型和帳戶名稱。如果您有更好的方式獲得這兩個屬性,請分享它。謝謝 –

回答

0

這聽起來像你真的想同時做兩個不同的事情。從數據庫中檢索兩個對象,這真的是一個選擇是正確的?因此,當JPA完成選擇時,您會希望實體擁有當前存儲在數據庫中的信息。

那麼,爲什麼不只是做一個SELECT然後更新?

此外,有沒有商業的原因有重複的信息?從設計的角度來看,客戶是否有與之相關的賬戶對象而不是重複賬戶類型和賬號?

+0

客戶實體引用數據庫中的帳戶實體。我沒有進行更新。我想從數據庫中檢索一個Customer Entity,該數據庫不包含Account實體,但包含它在數據庫中引用的Account記錄的accountType和accountName。如果您有更好的方式獲得這兩個屬性,請分享它。謝謝 –