Автоматически сгенерированный ключ JPA не отражается во внешнем ключе дочерней таблицы

#jpa #spring-boot #hsqldb

#jpa #spring-boot #hsqldb

Вопрос:

Родительская таблица:

 @Table(name="parent_table_t")
public class ParentTable implements Serializable {

@Id
@Column(name="contact_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer contactId;
---------
---------
@OneToOne (cascade = CascadeType.ALL, mappedBy = "parentTable")
private ChildTable childTable;
}
 

Дочерняя таблица:

 @Table(name="child_table_t")
public class ChildTable implements Serializable {

@Id
@Column(name="child_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer childId;

@Column(name="contact_id")
private Integer contactId;

@JoinColumn(name="contact_id", referencedColumnName = "contact_id", insertable=false, updatable=false)
@OneToOne(cascade = CascadeType.ALL)
private ParentTable parentTable;
}
 

Мое требование заключается в том, что когда contact_id генерируется в Parent_table_t, он должен быть скопирован в contact_id дочерней таблицы при сохранении.

Когда я вызываю saveAndFlush / save для объекта родительской таблицы, это: генерация автоматического увеличения для Parent-> contact_id. Но Child_table_t -> contact_id всегда имеет значение null . Может кто-нибудь, пожалуйста, помочь в этом. Я использую встроенный в память hsqldb с spring-boot и JPA.

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

1. Вам необходимо удалить insertable=false, updatable=false и убедиться, что установлены обе стороны отношения, т.е. Родительская таблица в дочернем = сохраняемый родитель.

Ответ №1:

Вы отметили отношение @JoinColumn с помощью insertable=false, updatable=false , вероятно, потому, что у вас также есть целочисленное отображение для столбца. К сожалению, эти настройки не позволяют JPA устанавливать его со значениями из отношения, которое вместо этого вынуждено устанавливать столбец со значением в атрибуте ContactID .

Вместо этого поместите вставляемый =false, обновляемый=false в @Column .

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

1. Спасибо за вашу помощь, но по-прежнему Child_table_t -> ContactID имеет значение null.

2. нужно ли мне инициализировать переменные родительской / дочерней таблицы?