2016-07-06 5 views
0

に(、埋め込み埋め込まれた)複数のコンポーネントタイプを使用していますが、すべての例では、たとえば、私の一つのオブジェクトに1 Componentを示す方法:私はgoogleの注釈

私は2つを持っているしたいhttps://dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-component-using-annotations-1.html

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; 
} 

Hibernateマッピング:

<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> 
例えば、一つのオブジェクトで Component

上記の2つのComponenthomePhoneおよびmobilePhoneがあります。上に翻訳する方法HibernateJavaへの注釈の注釈? @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",[email protected](name="HOME_AREA_CODE"), 
    @AttributeOverride(name="phoneNumber",[email protected](name="HOME_PHONE_NUMBER"), 
    @AttributeOverride(name="name",[email protected](name="HOME_NAME")}) 
    private PhoneNumber homePhone = null; 
    @Embedded 
    @AttributeOverrides({ 
    @AttributeOverride(name="areaCode",[email protected](name="MOBILE_AREA_CODE"), 
    @AttributeOverride(name="phoneNumber",[email protected](name="MOBILE_PHONE_NUMBER"), 
    @AttributeOverride(name="name",[email protected](name="MOBILE_NAME")}) 
    private PhoneNumber mobilePhone = null; 
    } 

注釈あなたの携帯電話のクラスカラム名が異なる各携帯電話のコンポーネントについては。 @AttributeOverrrideを使用して、エンティティのために適切な列名を指定します。これにより、コンポーネントクラスが異なる列にマップされます。

関連する問題