I google, but all example only showing me one Component
in one object, for example:
I want to have two Component
in one object, for example:
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 mapping:
<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>
I have two Component
above, homePhone
and mobilePhone
. How to translate above Hibernate
mapping into Java
annotation?
@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;
}
Annotate you Phone class with @Embeddable
As for each phone component the column name differs. Use the @AttributeOverrride and specify the appropriate column name in you owing entity.This will map the component class to different columns.