0

我的

@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;

提前致谢!

4

1 回答 1

1

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

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

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

于 2013-09-16T15:30:44.017 回答