我有这两个类,我正在尝试使用hibernate和JPA注释来执行级联保存更新,但是当我尝试保存我的Order对象时,我得到的描述如下:
这是Order类
@Entity
@Table(name="orders")
public class Order {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private Integer idOc;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL ,mappedBy = "order")
@Valid
private List<OrderLine> lines = new ArrayList<OrderLine>(Arrays.asList(new OrderLine()));
// getters and setters
}
这是我的OrderLine类
@Entity
@Table(name="orderLines ")
public class OrderLine {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private Integer idOl;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idOc")
private Order order;
// getters and setters
}
以下是我得到的例外情况:
1 - org.hibernate.exception.ConstraintViolationException:无法执行语句。
2 - 引起:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列'idOl'不能为空。
idOl是由hibernate生成器分配的,但不知何故它不起作用。有什么想法吗?
更新 在控制台上,我可以看到Hibernate正在父表上执行插入,但是当它尝试在子表上执行插入时,抛出异常。 我可以看到Hibernate没有为List&lt;&gt;中包含的每个元素分配自动增量值,但我无法弄清楚原因。
答案 0 :(得分:0)
我依赖一个真正的DB序列对象。例如在课程级别定义以下内容:
@SequenceGenerator(
name="SEQ_ORDER",sequenceName="SEQ_ORDER", allocationSize=1, initialValue=1)
然后在GeneratedValue
字段的Id
属性中使用相同的序列。 e.g
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_ORDER")
@Column(name="ID", nullable=false)
protected Integer id;