为什么hibernate没有在级联上做自动增量?

时间:2015-02-13 00:47:05

标签: java hibernate

我有这两个类,我正在尝试使用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没有为Lis​​t&lt;&gt;中包含的每个元素分配自动增量值,但我无法弄清楚原因。

1 个答案:

答案 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;