Hibernate не генерирует оператор вставки с определенным столбцом - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть 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 не может относится к обоим Entity_A и EntityRelationship_A_B.

При использовании двунаправленных ссылок для сторон, я вижу, что EntityRelationship_A_B сохраняет с правильными значениями для a_id, b_id, relationship_id;

Но Entity_B всегда сохраняется с null для relationship_id;фактически оператор вставки для Entity_B никогда не содержит relationship_id столбца вообще.Однако я могу гарантировать, просматривая значения времени выполнения, что ссылки EntityRelationship_A_B установлены правильно EntityRelationship_A_B.Entity_B.

Что я делаю неправильно?

...