#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
вызывает проблемы. Если я переместил его в другой атрибут, он работает.