【问题标题】:JPA Embeddable can have ElementCollection<Embeddable> propertyJPA Embeddable 可以具有 ElementCollection<Embeddable> 属性
【发布时间】:2014-02-12 05:07:41
【问题描述】:

JPA ElementCollection Embeddable 可以有 ElementCollection List Embeddable 属性吗?

  @Entity
  class Person {
  @ElementCollection
    private List<Address> addressList;
  }


 @Embeddable
    public class Address {
      private String city;
      private String state;
      private String countary;
    @ElementCollection
    private List<Phone> phones;

      ...
    }
    @Embeddable
    public class Phone {
      private String type;
      private String areaCode;
      private String number;
      ...
    }

【问题讨论】:

    标签: java jpa orm jpa-2.0


    【解决方案1】:

    是的,你可以拥有它,如果你尝试你的配置,你会得到类似的东西。

    http://postimg.org/image/pc0f3cxbp/

    此外,可嵌入类型可以与 JPA 允许的其他实体具有集合关系。

    取自规范 JSR317

    一个可嵌入的类可以用来表示另一个类的状态 可嵌入类。

    一个可嵌入的类(包括一个可嵌入的类在另一个 可嵌入类)可能包含基本类型或其他类型的集合 可嵌入类。

    一个可嵌入的类可能包含一个实体的关系或 实体的集合。由于可嵌入类的实例 自己没有持久的身份,关系从 引用的实体是包含可嵌入的实体 实例而不是嵌入本身。

    用作嵌入 id 或映射键的可嵌入类 不能包含这样的关系

    更新

    根据您的问题,如果可嵌入对象可以包含可嵌入对象列表,这是可能的,并且可以按照此答案中的图片建议完成,但是关于 if 和 ElementCollection 可以包含带有另一个元素集合的可嵌入对象答案是否

    试图这样做会导致。

    映射包含一个可嵌入的“examples.model.Address” 禁止映射“电话”,元素集合可能不包含 具有元素集合映射的可嵌入对象

    【讨论】:

    • 这种情况是否可能:实体具有可嵌入类 1 的集合,而可嵌入类 1 具有可嵌入类 2 的集合?
    • 是的,这是可能的,正如您在我附加的图片中看到的那样 地址是可嵌入的,它包含可嵌入类电话的列表,如果有帮助请不要忘记接受我的回答
    • 感谢您的回复,我明白您的意思是 Embeddable 可以有 ElementCollection Embeddable 但不明白 ElementCollection List 怎么可能有 ElementCollection List 属性,因为 AddressEmbeddable 没有主那么 AddressEmbeddable 怎么才能得到它的连接电话呢?请解释....
    • 基于您在可嵌入列表中的新列表示例,答案并不像您想象的那样无法完成,因为您没有办法相互链接,请参阅我的答案中的更新
    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2012-08-12
    • 2016-12-25
    • 2013-05-06
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多