ゼロ対 1 の 2 つのエンティティ間の関係を確立しようとしています。つまり、親は関連付けられた子エンティティなしで保存でき、関連付けられた子とともに保存することもできます。以下は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 (子)
public class EmployeeInfo {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name="EMPLOYEE_EMAIL")
private String email;
MySql DB で AUTO INCREMENT に設定された唯一の親 (従業員) テーブルのこのような関係と id 列では、問題は、親->子オブジェクト グラフの保存中に、次の例外が発生することです。
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
DB で Child Table の Id プロパティを AUTO INCREMENT に設定してみましたが、このような Parent->Child オブジェクト グラフの永続化は成功しています。ただし、関連する EmpInfo オブジェクトなしで親 (Employee) オブジェクトを保存したいシナリオがあるため、ここで説明されている問題が表面化しており、したがって、子の id 列に AUTO INCREMENT を設定したくありません。
1 つの解決策は、PrimaryKeyJoinColumn を使用せずに特定の JoinColumn を使用することですが、それによって既存のテーブルに不要な列が追加されます。
誰もそのような問題に遭遇しましたか?はいの場合、ポインタは非常に役立ちます。