【问题标题】:How to use more than one Component type (Embedded, Embeddable) in annotation如何在注解中使用一种以上的组件类型(Embedded、Embeddable)
【发布时间】:2016-07-06 08:18:15
【问题描述】:

我用谷歌搜索,但所有示例仅在一个对象中显示一个 Component,例如:

https://dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-component-using-annotations-1.html

我想在一个对象中有两个Component,例如:

public class PhoneNumber {
   // Phone details
   private int areaCode = 0;
   private int phoneNumber = 0;
   private String name = null;
}

public class Person {
   private String firstName = null;
   private String nickName = null;
   private String lastName = null;
   // Multiple phone details
   private PhoneNumber homePhone = null;
   private PhoneNumber mobilePhone = null;
}

休眠映射:

<class name="Person" table="PERSON">
 <id name="id" column="PERSON_ID">
  <generator class="native"/>
 </id>

 <property name="firstName" column="FIRST_NAME" />
 ...

 <component name="homePhone" class="PhoneNumber">
  <property name="areaCode" column="HOME_AREA_CODE"/>
  <property name="phoneNumber" column="HOME_PHONE_NUMBER"/>
  <property name="name" column="HOME_NAME"/>
 </component>

 <component name="mobilePhone" class="PhoneNumber">
  <property name="areaCode" column="MOBILE_AREA_CODE"/>
  <property name="phoneNumber" column="MOBILE_PHONE_NUMBER"/>
  <property name="name" column="MOBILE_NAME"/>
 </component>
</class>

我上面有两个ComponenthomePhonemobilePhone。上面的Hibernate映射如何翻译成Java注解?

【问题讨论】:

    标签: hibernate jpa annotations embeddable


    【解决方案1】:
    @Embeddable    
    public class PhoneNumber {
     // Phone details
      private int areaCode = 0;
      private int phoneNumber = 0;
       private String name = null;
     }
    
     public class Person {
       private String firstName = null;
       private String nickName = null;
       private String lastName = null;
       // Multiple phone details
       @Embedded
       @AttributeOverrides({
       @AttributeOverride(name="areaCode",column=@Column(name="HOME_AREA_CODE"),
        @AttributeOverride(name="phoneNumber",column=@Column(name="HOME_PHONE_NUMBER"),
      @AttributeOverride(name="name",column=@Column(name="HOME_NAME")})
       private PhoneNumber homePhone = null;
      @Embedded
      @AttributeOverrides({
      @AttributeOverride(name="areaCode",column=@Column(name="MOBILE_AREA_CODE"),
      @AttributeOverride(name="phoneNumber",column=@Column(name="MOBILE_PHONE_NUMBER"),
      @AttributeOverride(name="name",column=@Column(name="MOBILE_NAME")})
       private PhoneNumber mobilePhone = null;
       }
    

    使用@Embeddable 注释你的电话类

    对于每个电话组件,列名不同。使用@AttributeOverrride 并在您拥有的实体中指定适当的列名。这会将组件类映射到不同的列。

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 1970-01-01
      • 2017-10-31
      • 2023-03-08
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      相关资源
      最近更新 更多