以前の質問から導入部分をコピーして貼り付けます。
製品とその色の間に多対多の関係がある EclipseLink 2.3.2 で JPA 2.0 を使用しています。製品には多くの色があり、色は多くの製品に関連付けることができます。この関係は、データベースでは 3 つのテーブルで表されます。
- 製品
- prod_colour (結合テーブル)
- 色
このテーブルには、関連する親テーブルとそれぞれからのprod_colour
2 つの参照列がprod_id
あります。colour_id
product
colour
明らかなように、エンティティ クラスには という名前Product
の一連の色があります。java.util.Set<Colour>
colourSet
エンティティ クラスには、という名前Colour
の一連の製品があります。java.util.Set<Product>
productSet
テーブルに行を追加したり、テーブルから行を削除したりするために、次のようにエンティティ クラス自体prod_colour
に 2 つのメソッドを定義しました。Colour
public void addToProduct(Product product) {
this.getProductSet().add(product);
product.getColourSet().add(this);
}
public void removeFromProduct(Product product) {
this.getProductSet().remove(product);
product.getColourSet().remove(this);
}
これらのメソッドは、次のように EJB から呼び出されます。
@Override
@SuppressWarnings("unchecked")
public void insert(List<Colour> colours, Product product) {
for (Colour colour : colours) {
colour.addToProduct(product);
}
}
@Override
@SuppressWarnings("unchecked")
public void delete(Colour colour, Product product) {
colour.removeFromProduct(product);
}
テーブルに行を追加したり、テーブルから行を削除したりすることを期待していprod_colour
ますが、何も起こりません (エラーも例外も発生しません)。同じことがHibernateでも機能します。それで、ここで他に何が欠けていますか?
編集:
Product
エンティティ クラス:
public class Product implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "prod_id")
private Long prodId;
private static final long serialVersionUID = 1L;
@JoinTable(name = "prod_colour", joinColumns = {
@JoinColumn(name = "prod_id",
referencedColumnName = "prod_id")},
inverseJoinColumns = {
@JoinColumn(name = "colour_id", referencedColumnName = "colour_id")})
@ManyToMany(fetch = FetchType.LAZY)
private Set<Colour> colourSet;
//Getters and Setters.
}
Colour
エンティティ クラス。
public class Colour implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "colour_id")
private Long colourId;
private static final long serialVersionUID = 1L;
@ManyToMany(mappedBy = "colourSet", fetch = FetchType.LAZY)
private Set<Product> productSet;
//Setters and getters.
}