首页 > 解决方案 > 休眠不生成具有某些列的插入语句

问题描述

我有 3 个实体相互交互,如下所述。

Entity_A {
   @Id
   private String id;

   @OneToMany(cascade=CascadeType.ALL, mappedBy="a", orphanRemoval=true)
   private List<Entity_B> b;

   @OneToMany(cascadeType.ALL, mappedBy="a", orphanRemoval=true)
   private List<EntityRelationship_A_B> relationship;
}

@Embeddable
EntityRelationship_A_B_Id {
     @Column(name="a_id")
     private String a_id;

     @Column(name="b_id")
     private String b_id;

     @Column(name="relationship_id")
     private String relationship_id;
}

EntityRelationship_A_B {
   @EmbeddedId
   private EntityRelationship_A_B_Id id;

   @ManyToOne
   @JoinColumn(name="a_id", referencedColumn="a_id", insertable=false, updateable=false)
   private Entity_A a;

   @OneToOne(cascade = CascadeType.ALL, mappedBy="relationship", orphanremoval = true)
   private Entity_B b;
}

@Embeddable
Entity_B_Id {
   @Column(name="a_id")
   private String a_id;

   @Column(name="b_id")
   private String b_id;

   //std methods    
}

Entity_B {
    @EmbeddedId
    private Entity_B_Id id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "a_id", referencedColumn = "a_id", insertable = false, updateable = false)
    private Entity_A a;

    @OneToOne(fetch = fetchType.LAZY)
    @JoinColumn(name = "a_id", referencedColumn="a_id", insertable=false, updateable=false)
    @JoinColumn(name="b_id", referencedColumn="b_id", insertable=false, updateable=false)
    @JoinColumn(name="relationship_id", referencedColumn="relationship_id", insetable=false, updateable=false)
    private EntityRelationship_A_B relationship;

    // ....
}

ServiceImpl {
   save (...) {
        Manually populate and set Entity_B_Id into individual instance_A.instance_B
        Manually populate and set EntityRelationship_A_B_Id into individual instance_A.instance_A_B
        //...finally save the top level entity...
   }
}

由于数据的性质,相同的实例Entity_B 不能与 BothEntity_AEntityRelationship_A_B.

通过为拥有方实现双向引用,我可以看到EntityRelationship_A_B具有适当值的保存a_id, b_id, relationship_id;

Entity_B总是与nullfor一起存储relationship_id;事实上,插入语句Entity_B从不包含relationship_id列。但是,我可以通过查看运行时值来保证EntityRelationship_A_B引用设置正确EntityRelationship_A_B.Entity_B

我究竟做错了什么?

标签: hibernatespring-bootspring-data-jpah2hibernate-5.x

解决方案


推荐阅读