2

ショップのドメイン モデルに注釈を付けています (JPA 2、Hibernate Provider を使用)。

ショップでは、すべての製品にCategory. 各カテゴリは、複数のスーパーカテゴリとサブカテゴリに割り当てることができます。つまり、カテゴリ「キャンドル」は、「レストラン」と「装飾」を親として、「プレーン キャンドル」と「マルチウィック キャンドル」を子として持つことができます。

ここで、循環参照、つまり「b」を親として「a」を持つカテゴリ「a」を避けたいと考えています。

JPAで制約のある循環参照をチェックする方法はありますか? それとも、@PostPersist注釈付きのメソッドで、自分でいくつかのチェックを書く必要がありますか?

これが私のCategoryクラスです:

@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 ..
}
4

2 に答える 2

1

コード内のビジネス ルールを通じてこれを確認する必要があると思います。これらの ManyToMany マッピングを別の Entity に分けてみませんか? たとえば、次のようにします。

@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;
    }   

}

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

于 2012-04-11T19:19:56.900 に答える