2016-07-06 3 views
0

I Google, но все только пример показывает мне один Component в одном объекте, например:Как использовать более одного компонент типа (Embedded, Встраиваемый) в аннотации

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> 

У меня есть два Component выше, homePhone и mobilePhone. Как перевести выше Hibernate отображение в Java аннотация?

ответ

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

Annotate вы телефон класса с @Embeddable

Как для каждого компонента телефона имя столбца отличается. Используйте @AttributeOverrride и укажите соответствующее имя столбца в вашей сущности. Это отобразит класс компонента в разные столбцы.

Смежные вопросы