当前位置: 首页 > 面试题库 >

Hibernate 3.5中的@OrderColumn批注

邵繁
2023-03-14
问题内容

我正在尝试在@OrderColumnHibernate 3.5中使用注释

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

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


问题答案:

Hibernate不支持@OneToMany(html" target="_blank">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-
in​​dexbidir

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

此更改的最终结果是,关系的“许多”端现在确定了如何保持关系。您的Java代码需要确保List正确更新,因为Hibernate现在在刷新实体时将忽略“一侧”。

如果您仍然想用Java访问“一侧”,请使用

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


 类似资料:
  • 问题内容: 有人可以在Spring 3中解释@RequestBody和@ResponseBody注释吗?他们是干什么的?任何例子都很好。 问题答案: 在文档中有一个名为16.3.3.4的完整章节,其中将请求主体与@RequestBody批注进行映射。还有一个叫做16.3.3.5的映射,它使用@ResponseBody注释映射响应主体。我建议你查阅这些部分。也相关:@RequestBodyjavad

  • 问题内容: 我试图了解JPA 中注释的属性。我在下面的示例中创建了一个客户具有订单列表的示例: 现在,当我使用Hibernate生成表时,我看到Hibernate仅创建了2个表: 另外,如果我尝试保存客户和一些订单,我会在下面看到由Hibernate生成的DML语句: 为什么Hibernate试图在TBL_ORDER中插入和更新记录,而不仅仅是运行单个插入查询? 现在,如果我删除mapledBy属

  • 根据Java EE6文档,JPA1.0使用字段名,而JPA2.0在声明注释时使用列名。请看这里: http://docs.oracle.com/javaee/6/api/javax/persistence/orderby.html 为什么事情会这样做,还有更深层次的原因吗?它是JPA1.0的遗迹吗?

  • 我已经多次清理编译了这个项目,处理器从来没有看到值。我在这里忽略了什么?处理器显然可以看到注释本身,但传递给它的参数是隐藏的。

  • 问题内容: 从如上所述映射的列表中删除元素时出现问题。这是映射: 插入Bar实例并保存Foo效果很好,但是当我从列表中删除一个元素并再次保存时,映射表中对bar_id的唯一约束被违反。以下SQL语句是由hibernate发出的,这些看起来很奇怪: 考虑到Hibernate生成的语句,该错误完全有意义(列表中有五个项目,我删除了第一个项目,Hibernate删除了具有LAST索引的映射行,并尝试从第

  • 我有两个结构相同的表,我想使用另一个表的数据更新一个表,匹配主键。SQLite有一个with(CTE)语句,但以下语句不起作用(sqlite3 v.3.29.0): 我尝试过使用“选择main.ID作为ID,选择temp.Desc作为Desc”,但得到了相同的错误消息。