2013-09-16 56 views
0

在數據對象選擇X最高/最低值

@Entity 
@Table(name = "Creditcard") 
@AdditionalCriteria(.....) 

public class Customer implements Serializable { 
    @Id 
    @Column(name ="CustomerId") 
    private long customerId; 
    @Column(name = "cardNumber"); 
    private String cardNumber; 
    @Column(name = "apply_date") 
    private java.sql.Date date; 
} 

示例表對CustomerID,1234數據:

CustomerId|cardNumber|apply_date|....other fields 
----------|----------|----------|---------------- 
0000000123|0000000001|2013-01-01|---------------- 
0000000123|0000000002|2013-09-10|---------------- 

是的,我知道,主鍵必須是一個複合鍵( EmbeddedID),但我仍然需要弄清楚。

由於@AdditionalCriteria我只得到1條目(因爲另一張卡被「禁止」) 但我需要從cardNumber'1'獲取'apply_date'。

是這樣的可能嗎?

像:

@Column(name = "apply_date") 
@GetMinValue(field_name = "CustomerId") 
private java.sql.Date date; 

提前感謝!

回答

1

首先,你的實體應該代表數據庫中的一行,而不是所有的行。因此,您的實體可能應該是一個「CreditCard」實體,使用「cardNumber」作爲主鍵,或者唯一標識數據庫行的唯一標識符。

然後,由於CustomerId似乎可能是具有客戶數據的表的外鍵,因此您將擁有與CreditCards具有1:M關係的客戶實體。然後,該客戶實體可以擁有在JPA postLoad事件中設置的臨時日期屬性,從JPQL查詢中獲取值:「從CreditCard cc選擇cc.date,其中cc.customerId =:customerId」;

設置僅使用信用卡表中的單張卡/行的客戶實體似乎是一個壞主意,因爲當客戶獲得另一個信用卡時,您將執行什麼操作 - 它是同一客戶,但是是新卡。如果您使用單獨的實體對象,則只需保留相同的Customer實體並分配新的信用卡對象。

+0

你好,謝謝你的回答。我已經使用@PostLoad和NativeQuery解決了它。我無法改變數據庫中的任何東西。 – Beig