gpt4 book ai didi

hibernate - Hibernate 3.5 中的 @OrderColumn 注释

转载 作者:行者123 更新时间:2023-12-03 10:37:51 26 4
gpt4 key购买 nike

我正在尝试使用 @OrderColumn使用 Hibernate 3.5 进行注释

@OneToMany(mappedBy = "parent",fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@OrderColumn(name = "pos")
private List<Children> childrenCollection;

检索数据时,一切正常。但是我不能让它重新排序列表中的元素并将新订单保存到数据库中。

最佳答案

Hibernate 不支持 @OneToMany(mappedBy="...") 和 @OrderColumn 的组合。当使用此无效组合时,此 JIRA 问题会跟踪抛出更明显错误消息的请求:http://opensource.atlassian.com/projects/hibernate/browse/HHH-5390

我认为这不受支持,主要是因为它是一种奇怪的关系模式。上面的注释表明关系的“一个”端决定了如何将关系刷新到数据库,但订单/位置仅通过检查列表在“多”端可用。 “多”方拥有这种关系更有意义,因为该方知道元素的成员资格和顺序。

Hibernate Annotations 文档详细描述了这种情况:

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-collection-extratype-indexbidir

解决方法是删除“mappedBy”属性,这将导致关联使用默认连接表策略而不是目标表上的列。您可以使用@JoinTable 批注指定连接表的名称。

此更改的净效果是关系的“多”方面现在决定了关系的持久性。您的 java 代码需要确保 List 正确更新,因为 Hibernate 现在将在刷新实体时忽略“一”侧。

如果您仍然希望在 Java 中访问“一”侧,请将其映射为

@ManyToOne
@JoinColumn(name="...", insertable=false, updatable=false, nullable=false)

关于hibernate - Hibernate 3.5 中的 @OrderColumn 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2956171/

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