gpt4 book ai didi

java - 如何避免使用 JPA 注释的循环引用?

转载 作者:行者123 更新时间:2023-11-30 11:45:53 25 4
gpt4 key购买 nike

我正在为商店注释我的域模型(使用 JPA 2,使用 Hibernate Provider)。

在商店中,每个产品都可以有一个类别。每个类别都可以分配给多个父类(super class)别和子类别,这意味着类别“蜡烛”可以有“餐厅”和“装饰”作为父类,“普通蜡烛”和“多芯蜡烛”作为子类等。

现在我想避免循环引用,我。 e.以“b”作为其父级的类别“a”,而“b”又以“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 ..
}

最佳答案

我相信您必须通过代码中的业务规则来检查这一点。为什么不将这些 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;
}

}

这样,您可以在保存新实体之前查询任何现有的父子组合。

关于java - 如何避免使用 JPA 注释的循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10111281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com