Hibernate (Spring JPA): @ManyToOne JoinColumns (которые являются встроенным идентификатором) равны нулю

#java #spring #hibernate #many-to-one #joincolumn

#java #spring #спящий режим #многие к одному #объединенный столбец

Вопрос:

Я не увидел свою ошибку, и после исследования stackoverflow и Google я думаю, что код должен быть правильным. Но Hibernate (spring-boot-starter-data-jpa 2.2.4) по-прежнему заполняет JoinColumns null .

Вот мой OneToMany класс:

 @Entity
@Table(name = "tablea", schema = "")
public class TableAEntity implements Serializable {

    private static final long serialVersionUID = 7890327260188587351L;

    @EmbeddedId
    private MyId id;
    
    @OneToMany(cascade = ALL, mappedBy = "tableA", orphanRemoval = true, fetch = FetchType.LAZY)
    private List<TableBEntity> tableBentries;
    
    // Getter   Setter
}
  

Моим EmbeddedId классом:

 @Embeddable
public class MyId implements Serializable {

    private static final long serialVersionUID = -8267953052238233498L;

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

    @Column(name = "iddate")
    private Date iddate;

    @Column(name = "idint")
    private BigInteger idint;
    
    // Getter   Setter
}
  

И, наконец, мой ManyToOne класс:

 @Entity
@Table(name = "tableB", schema = "")
public class TableBEntity implements Serializable {

    private static final long serialVersionUID = -4648090658471459969L;

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
        @JoinColumn(name = "id", referencedColumnName = "id"),
        @JoinColumn(name = "iddate", referencedColumnName = "iddate"),
        @JoinColumn(name = "idint", referencedColumnName = "idint")
    })
    private TableAEntity tableA;
    
    // Some other attributes
    
    // Getter   Setter
}
  

Как вы можете видеть, я хочу использовать атрибуты ( id , iddate и idint ) в качестве объединенного основного ключа в обеих таблицах.

Когда я создаю TableAEntity объект, я добавляю несколько TableBEntity объектов к tableBentries атрибуту. И для каждого TableBEntity я устанавливаю ссылку на TableAEntity (атрибут tableA ). И, конечно, объект MyId (атрибут id ) заполнен.

После сохранения TableAEntity объекта Hibernate также сохраняет все, TableBEntity кроме полей id , iddate и idint (все объединяемые столбцы) являются null .

Есть идеи?

Комментарии:

1. Возможно, вы можете использовать ‘private MyId id’ в качестве JoinColumns. Я предполагаю, что он автоматически сохраняет все три поля.

Ответ №1:

Кажется, что @Id в моем TableBEntity вызывает проблемы. Если я переместил его в другой атрибут, он работает.