03hibernate_basemapping_uuid_native_assigned

hibernate基本映射:主键生成策略:uuid、native和assigned

实体类---表
实体类中的普通属性---表字段

采用<class>标签映射成数据库表,通过<property>标签将普通属性映射成表字段
所谓普通属性指不包括自定义类、集合和数组等

注意:如果实体类和实体类中的属性和sql中的关键字重复,必须采用table或column重新命名

实体类的设计原则:
    * 实现一个默认的(即无参数的)构造方法(constructor)
    * 提供一个标识属性(identifier property)(可选)
    * 使用非final的类 (可选)
    * 为持久化字段声明访问器(accessors)    

主键生成策略:uuid、native和assigned

a)ExportDB    
create table t_user1 (user_id varchar(32) not null, name varchar(20) not null unique, password varchar(10) not null, create_time datetime, expire_time datetime, primary key (user_id))

create table t_user2 (user_id integer not null auto_increment, name varchar(20) not null unique, password varchar(10) not null, createtime datetime, expiretime datetime, primary key (user_id))

create table t_user3 (user_id varchar(32) not null, name varchar(20) not null unique, password varchar(10) not null, create_time datetime, expire_time datetime, primary key (user_id))

b)BaseMappingTest:testSave
Hibernate: insert into t_user1 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
Hibernate: insert into t_user2 (name, password, createtime, expiretime) values (?, ?, ?, ?)
Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)

c)、uuid、native和assigned分别对应以下三张表:
public class User1 {
    
    private String id;
    
    private String name;
    
    private String password;
    
    private Date createTime;
    
    private Date expireTime;
<hibernate-mapping package="com.bjsxt.hibernate">
    <class name="User1" table="t_user1">
        <id name="id" column="user_id" length="32">
            <generator class="uuid"/>
        </id>
        <property name="name" unique="true" not-null="true" length="20"/>
        <property name="password" not-null="true" length="10"/>
        <property name="createTime" column="create_time"/>
        <property name="expireTime" column="expire_time"/>
    </class>
</hibernate-mapping>
mysql> select *  from t_user1;
+----------------------------------+--------+----------+---------------------+---------------------+
| user_id                          | name   | password | create_time         | expire_time         |
+----------------------------------+--------+----------+---------------------+---------------------+
| 402881e538dd22d20138dd22d4c50001 | 白龙马 | 123      | 2012-07-31 21:04:03 | 2012-07-31 21:04:03 |
+----------------------------------+--------+----------+---------------------+---------------------+
1 row in set (0.00 sec)


public class User2 {
    
    private int id;
    
    private String name;
    
    private String password;
    
    private Date createTime;
    
    private Date expireTime;
    
    <hibernate-mapping package="com.bjsxt.hibernate">
    <class name="User2" table="t_user2">
        <id name="id" column="user_id">
            <generator class="native"/>
        </id>
        <property name="name" unique="true" not-null="true" length="20"/>
        <property name="password" not-null="true" length="10"/>
        <property name="createTime" column="createtime"/>
        <property name="expireTime" column="expiretime"/>
    </class>
</hibernate-mapping>


------------------------------------------------------------------------------------
mysql> select *  from t_user2;
+---------+--------+----------+---------------------+---------------------+
| user_id | name   | password | createtime          | expiretime          |
+---------+--------+----------+---------------------+---------------------+
|       1 | 孙悟空 | 123      | 2012-07-31 21:04:04 | 2012-07-31 21:04:04 |
+---------+--------+----------+---------------------+---------------------+
1 row in set (0.00 sec)

public class User3 {
    
    private String id;
    
    private String name;
    
    private String password;
    
    private Date createTime;
    
    private Date expireTime;
<hibernate-mapping package="com.bjsxt.hibernate">
    <class name="User3" table="t_user3">
        <id name="id" column="user_id" length="32">
            <generator class="assigned"/>
        </id>
        <property name="name" unique="true" not-null="true" length="20"/>
        <property name="password" not-null="true" length="10"/>
        <property name="createTime" column="create_time"/>
        <property name="expireTime" column="expire_time"/>
    </class>
</hibernate-mapping>

------------------------------------------------------------------------------------
mysql> select *  from t_user3;
+---------+--------+----------+---------------------+---------------------+
| user_id | name   | password | create_time         | expire_time         |
+---------+--------+----------+---------------------+---------------------+
| 001     | 猪八戒 | 123      | 2012-07-31 21:04:04 | 2012-07-31 21:04:04 |
+---------+--------+----------+---------------------+---------------------+
1 row in set (0.00 sec)

 

posted @ 2012-07-31 21:19  Alamps  阅读(152)  评论(1编辑  收藏  举报