Я использую Java и Hibernate 3.6.4.Final.TABLE_B - это таблица отображения для конкретного типа объектов A (B), которые имеют отношение OneToMany с X объектами.У меня проблемы с вставкой B-сущности в БД.Считывание сущностей B из БД не является проблемой, и связанные с ними сущности X также корректно загружаются.
Модель БД:
- TABLE_A (id, active, info)
- TABLE_B (a_id, x_id)
- TABLE_X (id, info)
Сущность "A" может иметь ноль или более отношений с X-сущностями.Сущность «A», имеющая одно или несколько отношений с X, называется сущностью «B» и имеет свое поведение в коде.
(Имена классов и таблиц изменены для простоты)
@Entity
@Table(name = "TABLE_A")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class A {
...
}
@Entity
@Table(name="TABLE_B")
@PrimaryKeyJoinColumn(name="A_ID", referencedColumnName = "ID")
public class B extends A implements Serializable {
@OneToMany(cascade={CascadeType.ALL})
@JoinTable(
name="TABLE_B",
joinColumns = @JoinColumn( name="A_ID"),
inverseJoinColumns = @JoinColumn( name="X_ID", insertable = true, nullable = false)
)
private List<X> Xs;
...
}
Журнал:
SQLStatementLogger - insert into TABLE_A (active, info) values (?, ?)
SQLStatementLogger - insert into TABLE_B (A_ID) values (?)
JDBCExceptionReporter - could not insert: [com.test.B] [insert into TABLE_B (A_ID) values (?)]
java.sql.SQLException: Field 'X_ID' doesn't have a default value
Я бы понял, если проблема вызвана указанием таблицы сущностей как "TABLE_B" и использованием ее для таблицы соединений OneToMany, но именно так выглядит моя модель БД.Мне кажется, что Hibernate сначала пытается просто вставить наследование, и если это сработает, следующая вставка будет отображением между B и X. Проблема в том, что для меня таблица наследования и отображения одинакова.
Как мне правильно отобразить мою модель БД в Hibernate?Помощь очень ценится.