「Association」、「Account」、「Transaction」、「TransactionEvent」の4つのエンティティを一緒にマッピングします。AssociationのIDは単純な整数IDです。アカウントとトランザクションにはそれぞれ、アソシエーションと番号へのマッピングで構成されるIDが埋め込まれています。
TransactionEventには、1つのアカウントと1つのアソシエーションで構成される埋め込みIDが必要です。これで、それぞれがアソシエーションにマップされ、1つのTransactionEventで同じアソシエーションになりたいと思います。
JPAアノテーションはHibernateマッピングに使用されますが、これを機能させることはできません。アソシエーションキーに同じ列名を強制しようとしましたが、Hibernateが列の繰り返しについて文句を言います。
これを解決することは可能ですか、それとも私はまっすぐに考えていませんか?
アノテーションが付けられたクラスは次のとおりですが、getter / setterと非id列、javax.persistence名前空間からのアノテーションを削除しました。
@Entity
public class Association implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private long id;
}
@Embeddable
public class AccountPK implements Serializable {
@ManyToOne(optional=false)
private Association association;
@Column(nullable=false)
private int number;
}
@Embeddable
public class TransactionPK implements Serializable {
@ManyToOne
private Association association;
@GeneratedValue(strategy=GenerationType.AUTO)
private long number;
}
@Embeddable
public class AccountEventPK implements Serializable {
@ManyToOne(optional=false)
@JoinColumns({
@JoinColumn(name="association_id", referencedColumnName="association_id"),
@JoinColumn(name="account_number", referencedColumnName="number")
})
private Account account;
@ManyToOne(optional=false)
@JoinColumns({
@JoinColumn(name="association_id", referencedColumnName="association_id"),
@JoinColumn(name="transaction_number", referencedColumnName="number")
})
private Transaction transaction;
}
実際のアカウント、トランザクション、およびAccountEventエンティティはフォームにあります
@Entity
public class Account implements Serializable {
@EmbeddedId
private AccountPK id;
}