それぞれT_ACCOUNTとT_ACCOUNT_BENEFICIARYという名前の 2 つの DB テーブルがあります。
これらのテーブルの構造は次のとおりです。
create table T_ACCOUNT (ID integer identity primary key, NUMBER varchar(9), NAME varchar(50) not null, CREDIT_CARD varchar(16), unique(NUMBER));
create table T_ACCOUNT_BENEFICIARY (ID integer identity primary key, ACCOUNT_ID integer, NAME varchar(50), ALLOCATION_PERCENTAGE decimal(5,2) not null, SAVINGS decimal(8,2) not null, unique(ACCOUNT_ID, NAME));
また、T_ACCOUNTテーブルはT_ACCOUNT_BENEFICIARYテーブルに 1 対多の関係でバインドされています。これをグラフィカルに表現します。
これは、 T_ACCOUNTテーブルをマップするAccountという名前の最初のクラスです。
@Entity
@Table(name="T_ACCOUNT")
public class Account {
@Id
@GeneratedValue
@Column(name="id")
private Long entityId;
@Column(name="NUMBER")
private String number;
@Column(name="NAME")
private String name;
@OneToMany
@JoinColumn(name="ACCOUNT_ID")
private Set<Beneficiary> beneficiaries = new HashSet<Beneficiary>();
@Column(name="CREDIT_CARD")
private String creditCardNumber;
// GETTERS & SETTERS
}
これは、 T_ACCOUNT_BENEFICIARYテーブルをマップする受益者クラスです。
/**
* A single beneficiary allocated to an account. Each beneficiary has a name (e.g. Annabelle) and a savings balance
* tracking how much money has been saved for he or she to date (e.g. $1000).
*/
@Entity
@Table(name="T_ACCOUNT_BENEFICIARY")
public class Beneficiary {
@Id
@GeneratedValue
@Column(name="ID")
private Long entityId;
@Column(name="NAME")
private String name;
@Embedded
@AttributeOverride(name="value",column=@Column(name="ALLOCATION_PERCENTAGE"))
private Percentage allocationPercentage;
@Embedded
@AttributeOverride(name="value",column=@Column(name="SAVINGS"))
private MonetaryAmount savings = MonetaryAmount.zero();
アカウントを見るとわかるように、 1 対 5の関係を実装する受益者フィールドがあります。
@OneToMany
@JoinColumn(name="ACCOUNT_ID")
private Set<Beneficiary> beneficiaries = new HashSet<Beneficiary>();
DB では、この関係が T_ACCOUNT_BENEFICIARY テーブルのACCOUNT_IDフィールドによって実装されていることを知っています (したがって、T_ACCOUNT_BENEFICIARYテーブルの複数の行がACCOUNT_IDフィールドの同じ値を持つことができ、これは T_ACCOUNTテーブルの単一の行がT_ACCOUNT_BENEFICIARYテーブルの複数の行に関連付けられています)。
前の sippet でわかるように、@JoinColumn(name="ACCOUNT_ID")注釈があります。
私の疑問は、私のT_ACCOUNT_BENEFICIARYテーブルにACCOUNT_ID列があるという事実によって生成されます。
create table T_ACCOUNT_BENEFICIARY (ID integer identity primary key, ACCOUNT_ID integer, NAME varchar(50), ALLOCATION_PERCENTAGE decimal(5,2) not null, SAVINGS decimal(8,2) not null, unique(ACCOUNT_ID, NAME));
しかし、この列は、このT_ACCOUNT_BENEFICIARYテーブルをマップする受益者にマップされていないようです。
@JoinColumn (name="ACCOUNT_ID")はリレーショナル レベルで動作しており、受益者エンティティ ( T_ACCOUNT_BENEFICIARY ) によってマップされたテーブルのACCOUNT_ID列で結合操作を実行していますか、何か不足していますか? この結合はどのように正確に実行されますか?
私の解釈が正しければ、エンティティ レベルで作業して、Accountエンティティ クラスの受益者フィールドを、 Beneficiaryエンティティ クラスに挿入され、 T_ACCOUNT_BENEFICIARYテーブルのACCOUNT_ID列をマッピングする新しいaccountIdフィールドに結合すると言うことはできますか?
TNX