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

まず、エンティティは、すべての行ではなく、データベース内の行を表す必要があります。したがって、エンティティはおそらく、「cardNumber」を主キーとして使用する「CreditCard」エンティティ、またはデータベース行を一意に識別するものである必要があります。

次に、CustomerId はおそらく顧客データを含むテーブルへの外部キーであるように見えるため、CreditCards と 1:M の関係を持つ Customer エンティティを作成します。この顧客エンティティは、JPA postLoad イベントで設定した一時的な日付属性を持つことができ、JPQL クエリから値を取得します。

CreditCard テーブルの 1 つのカード/行のみを使用する Customer エンティティを設定するのは、悪い考えのように思えます。顧客が別の creditCard を割り当てられたときに何をするかというと、同じ顧客ですが、新しいカードです。別のエンティティ オブジェクトを使用する場合は、同じ Customer エンティティを保持し、新しいクレジット カード オブジェクトを割り当てるだけです。

于 2013-09-16T15:30:44.017 に答える