カスケードの永続性は、なぜ、新しいエンティティの主キーを生成するために失敗しましたか?
質問
このコードは次のとおりです。
@Entity
public class Dept {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@OneToMany(
mappedBy = "dept",
cascade = CascadeType.ALL
)
private List<Employee> employees = new ArrayList<Employee>();
public void addEmployee(Employee emp) {
this.employees.add(emp);
}
}
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column private Integer age;
public Employee(Integer a) {
this.age = a;
}
}
はその後、ユニットテストで私はこれを(OpenJPAのが使用されている)やっています
// ...
Dept dept = new Dept();
dept.addEmployee(new Employee(25));
this.em.persist(dept);
OpenJPAが言います:
Caused by: <openjpa-1.2.1-r752877:753278 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: Attempt to insert
null into a non-nullable column: column: ID table: EMPLOYEE in
statement [INSERT INTO employee (age) VALUES (?)]
{prepstmnt 841687127 INSERT INTO employee (age) VALUES (?)
[params=(int) 25]} [code=-10, state=23000]
なぜIDが自動生成されないのですか?
解決
あなた1対多の関係は、(mappedBy
による)双方向としてマッピングされているが、私は反対側を見ることができません。おそらくそれが原因です。
そして場合でも、それゆえ、それがデータベースに反映される状態を指定し、コード内で初期化されていない。
あなたが実際に平均一方向の関係、あなたがmappedBy
を削除する必要がある場合。
所属していません StackOverflow