Voici le code:La persistance en cascade échoue à générer une clé primaire pour une nouvelle entité, pourquoi?
@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;
}
}
Puis, dans un test unitaire je fais cela (OpenJPA est utilisé):
// ...
Dept dept = new Dept();
dept.addEmployee(new Employee(25));
this.em.persist(dept);
OpenJPA dit:
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]
Pourquoi ID est pas généré automatiquement?
Vous devriez probablement vérifier votre code: @Column private Integer age; public Employee (Integer age) { this.age = âge; } – Pau
Avez-vous un attribut pour département du côté Employé. Cela semble manquer dans le code. La cartographie par des moyens, le côté est l'entité propriétaire. Essayez de supprimer mappedby et de faire la persistance. – lalit