Hibernate的基本映射
映射文件的根元素为hibernate-mapping元素,这个元素下可以拥有多个class子元素,每个class子元素
对应一个持久化类的映射。
如下:
<hibernate-mapping>
<class/>
<class/>
........
</hibernate-mapping>
Hibernate的关系映射
1)单向N-1的关系映射(通常使用无连接表关联即可)
单向的N-1的关联只需从N的一端可以访问1的一端(比如多人对应同一个住址,只需从人的实体端找到对应的地址实体即可)
public class Person
{
private Address address;
private int personid;
private String name;
private int age;
public Address getAddress()
{
return address;
}
public void setAddress(Address address)
{
this.address = address;
}
}
//以上是一个Person的POJO,每个Person单向的对应一个Address,但无法从Address端来访问Person
//下面是Address的POJO
public class Address
{
private int addressid;
private String addressdetail;
public void setAddressid(int addressid)
{
this.addressid = addressid;
}
public void setAddressdetail(String addressdetail)
{
this.addressdetail = addressdetail;
}
public int getAddressid()
{
return (this.addressid);
}
public String getAddressdetail()
{
return (this.addressdetail);
}
}
//对于Address端而言,并不关心Person持久化类,在Address的代码中并没有对Person的访问。因此,Address的映射就是基本映射,无需改变
1.1)无连接表的N-1
<hibernate-mapping>
<class name="Person">
<id name="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<many-to-one name="address" column="addressId"/>
</class>
<class name="Address">
<id name="adressid">
<generator class="identity"/>
</id>
<property name="addressdetail"/>
</class>
</hibernate-mapping>
1.2)有连接表的N-1
若使用有连接表的N-1,需要使用join元素。join元素的table属性用于确定连接表的表名,使用key子元素来确定连接表外键,
并为元素增加many-to-one子元素,该子元素用来映射关联属性。
<hibernate-mapping package="lee">
<class name="Address">
<id name="addressid">
<generator class="identity"/>
</id>
<property name="addressdetail"/>
</class>
<class name="Person">
<id name="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<join table="join_table">
<key column="personid"/>
<many-to-one name="address"/>
</join>
</class>
</hibernate-mapping>