JPA,@OneToManyにmappedBy属性を加える
JPA,@OneToManyにmappedBy属性を加えて中間テーブルの生成を避ける
JPAを使用する場合、A Bの2つのエンティティ間が1対多、多対一の関係である場合、@OneToManyにmappedByプロパティ(inverse="true")を追加しないと、余分な中間テーブルが自動的に生成されます.例:
このように書くと、テーブルAとテーブルBが生成され、BにはテーブルAへの外部キーが1つしか生成されません.ただしmappedBy="a"を付けないと、もう1枚A_が生成されますB表
次のようになります.
mappedBy="customer"は、2つの関連付けられたエンティティBeanにおいてordersの一端が関係の所有者であることを示し、Ordersの一方のテーブルで関連付けられたクラスの外部キーが生成され、mappedByは双方向に関連付けられている場合にのみ、この属性cascade=ALL説明が使用され、OrdersがCRUD操作を行う場合、Customerは対応する操作を行う
JPAを使用する場合、A Bの2つのエンティティ間が1対多、多対一の関係である場合、@OneToManyにmappedByプロパティ(inverse="true")を追加しないと、余分な中間テーブルが自動的に生成されます.例:
@Entity public class A { @OneToMany(mappedBy="a") public Set<B> bs = new HashSet<B>(0); } @Entity public class B { @ManyToOne public A a; }
このように書くと、テーブルAとテーブルBが生成され、BにはテーブルAへの外部キーが1つしか生成されません.ただしmappedBy="a"を付けないと、もう1枚A_が生成されますB表
次のようになります.
In Customer class
@OneToMany(cascade=ALL, mappedBy="customer")
public Set getOrders() {
return orders;
}
In Order class
@ManyToOne
@JoinColumn(name="CUST_ID", nullable=false)
public Customer getCustomer() {
return customer;
}
mappedBy="customer"は、2つの関連付けられたエンティティBeanにおいてordersの一端が関係の所有者であることを示し、Ordersの一方のテーブルで関連付けられたクラスの外部キーが生成され、mappedByは双方向に関連付けられている場合にのみ、この属性cascade=ALL説明が使用され、OrdersがCRUD操作を行う場合、Customerは対応する操作を行う