2012-04-11 5 views
1

私は、(JPA 2、Hibernate Providerを使用して)ショップのドメインモデルに注釈をつけています。JPAで循環参照に注釈を付ける方法を回避するにはどうすればよいですか?

ショップでは、すべての製品にCategoryを使用できます。それぞれのカテゴリはいくつかのスーパーカテゴリとサブカテゴリに割り当てることができます。つまり、「キャンドル」カテゴリは「レストラン」と「装飾」を親として、「普通キャンドル」と「マルチウィックキャンドル」を子供などとして持つことができます。

さて、私は循環参照を避けたいと思います。 e。親として "b"を持ち、親として "a"を持つカテゴリ "a"。

JPAの制約付き循環参照をチェックする方法はありますか?または、自分で小切手を書く必要がありますか?@PostPersist-annotatedメソッドですか?私はあなたがこれはあなたのコード内でビジネスルールを谷チェックしなければならないと信じて

@Entity 
public class Category { 
    @Id 
    @GeneratedValue 
    private Long id; 

    private String name; 

    @ManyToMany 
    private Set<Category> superCategories; 
    @ManyToMany(mappedBy="superCategories") 
    private Set<Category> subCategories; 

    public Category() { 
    } 

    // And so on .. 
} 
+0

なぜそれが必要ですか? JPAはそれを自動的にチェックし、問題は発生しません。あなたはこれにどのような問題がありますか? –

+0

「親」フィールドはどこですか?あなたはそれを "mappedBy" – DataNucleus

答えて

1

は、ここに私のCategoryクラスです。なぜこれらのManyToManyマッピングを別のエンティティで分離しないのですか?

@Entity 
@Table(name = "TB_PRODUCT_CATEGORY_ROLLUP") 
public class ProductCategoryRollup { 

    private ProductCategory parent; 
    private ProductCategory child; 

    @Id  
    @GeneratedValue 
    public Integer getId() { 
     return super.getId(); 
    } 
    @Override 
    public void setId(Integer id) { 
     super.setId(id); 
    } 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="ID_PRODUCT_CATEGORY_PARENT", nullable=false) 
    public ProductCategory getParent() { 
     return parent; 
    } 
    public void setParent(ProductCategory parent) { 
     this.parent = parent; 
    } 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="ID_PRODUCT_CATEGORY_CHILD", nullable=false) 
    public ProductCategory getChild() { 
     return child; 
    } 
    public void setChild(ProductCategory child) { 
     this.child = child; 
    } 

} 

このようにして、新しいエンティティを保存する前に、既存の親子の組み合わせをクエリできます。

関連する問題