这是代码:

@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不是自动产生的?

有帮助吗?

解决方案

您一个一对多关系被映射为双向(由于mappedBy),但我不能看到对方。也许这是原因。

和就算多到一边确实存在,它不是在你的代码初始化尽管它的关系的持有端,因此它指定在数据库中反映出来的状态

如果你实际上意味着单向的关系,你需要删除mappedBy

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top