为什么未为Node元素填充集合的JPA关联?

时间:2018-11-06 09:16:50

标签: java hibernate jpa associations

我在使用JPA(休眠)和集合/列表之间的关联时遇到麻烦。 我基本上拥有的是一个类似于DOM-Element的Object,因为它具有Children / Children的collection / List和DOM根元素引用。 现在,我已经创建了一个用于测试的数据库,其中包含以下数据结构:

-root
--child1
--- child1.1
---- child1.1.1
--- child1.2
---- child1.2.1
---- child1.2.2
--- child1.3

现在,当我使用EntityManager检索对象时,所有子对象均已正确初始化(此处的重点是子对象!)。 除根节点之外的所有。 出于某种原因,该根将9个子级添加到其子级集合中。这9个孩子是9xchild1!

我感觉是由于事实,即List的关联是父对象mappedBy,并且由于根元素没有父元素,所以这里会发生错误。

但是,由于我是JPA的初学者,所以我不知道如何“修复”此行为!拜托,有人可以指出我正确的方向。

这是到目前为止的代码: 这是“ DOM-ELEMENT”对象

@Entity
class ProductNode extends EmmettEntity implements IProductNode {

    @OneToOne(targetEntity = ProductStructure.class)
    private IProductStructure productStructure;

    @OneToOne(targetEntity = Product.class)
    private IProduct referenceProduct;

    @ManyToOne(targetEntity = ProductNode.class , fetch=FetchType.LAZY)
    private IProductNode parentNode;

    @Embedded
    private final Position position = new Position();

    @OneToMany(targetEntity = ProductNode.class, mappedBy="parentNode")
    private List<IProductNode> children = new ArrayList<>();

    // needed for the use of JPA 
    protected ProductNode() {}

    ProductNode(IProduct refProduct, IProductNode parentNode, IProductStructure ps){
        Objects.requireNonNull(refProduct);
        Objects.requireNonNull(ps);
        this.referenceProduct = refProduct;
        this.productStructure = ps;
        this.parentNode = parentNode;
    }
// removed getters - setters, equals() etc. 
}

@Entity class ProductNode extends EmmettEntity implements IProductNode { @OneToOne(targetEntity = ProductStructure.class) private IProductStructure productStructure; @OneToOne(targetEntity = Product.class) private IProduct referenceProduct; @ManyToOne(targetEntity = ProductNode.class , fetch=FetchType.LAZY) private IProductNode parentNode; @Embedded private final Position position = new Position(); @OneToMany(targetEntity = ProductNode.class, mappedBy="parentNode") private List<IProductNode> children = new ArrayList<>(); // needed for the use of JPA protected ProductNode() {} ProductNode(IProduct refProduct, IProductNode parentNode, IProductStructure ps){ Objects.requireNonNull(refProduct); Objects.requireNonNull(ps); this.referenceProduct = refProduct; this.productStructure = ps; this.parentNode = parentNode; } // removed getters - setters, equals() etc. } 这是数据库数据的视图:

因此,当我得到ID = 2(根元素)的数据行时,我得到了一个包含9x(ProductNode.id = 3)的ProductNode。而且我不知道为什么,除了我希望这是由于root元素具有null作为父元素这一事实。

0 个答案:

没有答案