Hibernate映射文件之映射主键

Hibernate使用<id/>元素来映射主键。

<id name="" type="" column="" access="" unsaved-value="" length="" node="">
      <generator class=""/>
</id>

name:属性的名字

type:属性的类型,既可以是java数据类型,也可以是Hibernate内置数据类型

column:属性映射的数据表的字段名

access:属性的访问策略

unsaved-value:对Hibernate3来说基本上是不必要的

length:指定对应字段的长度

node:暂时不清楚

 

1、主键为基本数据类型及其包装类型、String类型、Date类型

<!--主键为Integer类型-->
<id name="id" type="java.lang.Integer" column="id">
      <generator class="identity"/>
</id>

<!--主键为String类型-->
<id name="strId" type="java.lang.String" column="str_id">
      <generator class="assigned" />
</id>

<!--主键为Date类型-->
<id name="dateId" type="java.util.Date" column="date_id">
     <generator class="assigned" />
</id>

 

2、主键为自定义数据类型

 

//必须实现Serializable接口,否则Hibernate会抛出异常。
public class Name implements Serializable {
	private String firstName;
	private String lastName;
        //......
}

 

public class Person {
	private Name name;

	public Name getName() {
		return name;
	}

	public void setName(Name name) {
		this.name = name;
	}
}

 

<composite-id name="name" class="org.lgy.hibernate.pojos.Name">
    <key-property name="firstName" type="string" column="first_name" length="100"/>
    <key-property name="lastName" type="string" column="last_name" length="100"/>
    <generator class="assigned"/>
</composite-id>


 

3、多列作为联合主键

//虽然主键没有实现类,但是Hibernate要求Person必须实现Serializable接口,否则抛出异常
public class Person implements Serializable {
	private String firstName;
	private String lastName;
        //... ...
}

 

<!-- 
    因为不是一个真实的属性,所以<composite-id/>元素不需要name属性。
    因为标识属性没有实现类,所以<composite-id/>元素不需要class属性。
-->
<composite-id>
       <key-property name="firstName" type="string" column="first_name" length="100"/>
        <key-property name="lastName" type="string" column="last_name" length="100"/>
</composite-id>


 

你可能感兴趣的:(Hibernate)