gpt4 book ai didi

java - 为什么 hibernate 不在级联上执行自动增量?

转载 作者:太空宇宙 更新时间:2023-11-04 14:09:38 24 4
gpt4 key购买 nike

我有这两个类,我正在尝试使用 hibernate 和 JPA 注释执行级联保存更新,但是当我尝试保存我的 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
}

以下是我遇到的异常(exception)情况:

1 - org.hibernate.exception.ConstraintViolationException:无法执行语句。

2 - 导致:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“idOl”不能为空。

idOl 应该由 hibernate 生成器分配,但不知何故它不起作用。有什么想法吗?

更新:在控制台上,我可以看到 Hibernate 正在父表上执行插入操作,但是当它尝试在子表上执行插入操作时,会引发异常。我可以看到 Hibernate 没有为 List<> 中包含的每个元素分配自动增量值,但我不明白为什么。

最佳答案

我依赖于真实的数据库序列对象。例如在类级别定义以下内容:

@SequenceGenerator(
name="SEQ_ORDER",sequenceName="SEQ_ORDER", allocationSize=1, initialValue=1)

然后在 Id 字段的 GeneratedValue 属性中使用相同的序列。例如

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_ORDER")
@Column(name="ID", nullable=false)
protected Integer id;

关于java - 为什么 hibernate 不在级联上执行自动增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28490679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com