在数据对象中选择x的最高/最低值

时间:2013-09-16 14:29:18

标签: jpa eclipselink

我的

@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 个答案:

答案 0 :(得分:1)

首先,您的实体应该代表数据库中的一行,而不是所有行。因此,您的实体可能应该是“CreditCard”实体,使用“cardNumber”作为主键,或者唯一唯一标识数据库行的实体。

然后,由于CustomerId似乎是具有客户数据的表的外键,因此您将拥有与CreditCards具有1:M关系的客户实体。然后,此客户实体可以具有您在JPA postLoad事件中设置的瞬态日期属性,从JPQL查询中获取值:“从CreditCard cc中选择cc.date,其中cc.customerId =:customerId”;

设置一个仅使用CreditCard表中的单个卡/行的客户实体似乎是一个坏主意,因为当客户获得另一个信用卡时,您会做什么 - 它是同一个客户,而是一张新卡。如果使用单独的实体对象,则只需保留相同的Customer实体并分配新的信用卡对象。