【问题标题】:Can I use @ElementCollection inside an @Embedded?我可以在@Embedded 中使用@ElementCollection 吗?
【发布时间】:2015-03-04 15:17:20
【问题描述】:

我有一个包含更多字段的可选子实体的实体。子实体再次具有元素集合。

这对于 Hibernate 来说通常是不可能的还是我错过了什么?

@Entity @Table(name="my_entity")
public class MyEntity {
  @Id 
  private Long id;

  @Embedded 
  @JoinTable(name="..." joinColumns=@JoinColumn(name="myEntityId"))
  private OptionalFields optionalFields;
}

@Embeddable
public class OptionalFields {
   @ElementCollection
   @CollectionTable(name="...", joinColumns=@JoinColumn(name="myEntityId"))
   private List<OpeningHoursItem> openingHours;
}

@Embeddable
public class OpeningHoursItem {

}

错误信息是:

Could not determine type for: java.util.List, at table: my_entity, for columns: [org.hibernate.mapping.Column(opening_hours)]

【问题讨论】:

  • this 回答你的问题了吗?
  • 感谢@Jan,有趣的链接。它相似但不完全相同,因为我有基数 1:1:N 而你的链接有 1:M:N。
  • 我无法重现该错误。如果我只将任何字段添加到 OpeningHoursItem 并用正确的名称替换 name='...' - 它可以工作。
  • @wypieprz O RLY???哎呀。你用的是什么版本的休眠?我的是 4.3.6.Final
  • 4.3.5.Final (hibernate-core + hibernate-entitymanager + hibernate-jpamodelgen + hibernate-c3p0) 和 5.1.0.Final (hibernate-validator)

标签: java hibernate jpa


【解决方案1】:

这听起来可能很奇怪,但它确实有效:

将所有注释从字段移动到 getter,然后错误消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 1970-01-01
    • 2013-02-01
    • 2011-12-12
    • 2014-12-01
    相关资源
    最近更新 更多