JPA,@OneToManyにmappedBy属性を加える

1129 ワード

JPA,@OneToManyにmappedBy属性を加えて中間テーブルの生成を避ける
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は対応する操作を行う