Я пытаюсь установить отношения между двумя объектами, которые были бы равны нулю. То есть Родитель может быть сохранен без связанной дочерней сущности, а также вместе с ассоциированным дочерним объектом.
Ниже приведены 2 класса сущностей ...
Сотрудник (родитель)
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="EMP_NAME")
private String name;
@PrimaryKeyJoinColumn
@OneToOne(cascade = {CascadeType.ALL})
private EmployeeInfo info;
@Column(name="EMP_ENUM")
private Integer enumId;
EmployeeInfo (Child)
public class EmployeeInfo {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name="EMPLOYEE_EMAIL")
private String email;
При таком типе столбца отношения и идентификатора единственной таблицы Parent (Employee), установленной в AUTO INCREMENT в MySql DB , проблема заключается в том, что при сохранении графа объекта Parent-> Child я получаю следующее исключение
org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access: SQLException for SQL [insert into EMP_INFO
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
Я попытался установить для свойства Id дочерней таблицы значение AUTO INCREMENT в БД , и сохранение такого графа объектов Parent-> Child успешно.
Тем не менее, проблема описана здесь поверхностей, потому что у меня есть сценарий, в котором я хотел бы сохранить родительский (Employee) объект без связанного объекта EmpInfo, и поэтому НЕ хочу иметь AUTO INCREMENT в столбце идентификатора ребенка .
Одним из решений может быть не использование PrimaryKeyJoinColumn, а использование определенного JoinColumn, но это добавляет ненужный столбец в мою существующую таблицу.
Кто-нибудь сталкивался с такой проблемой? Если да, любые указатели были бы очень полезны.