首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate详解(三)->>组件映射(二)之复合主键

2012-09-18 
hibernate详解(三)-----组件映射(二)之复合主键hibernate详解(三)-----组件映射(二)之复合主键??? 3、

hibernate详解(三)----->>组件映射(二)之复合主键

hibernate详解(三)----->>组件映射(二)之复合主键

?

?? 3、组件类作为持久化类的对象标识符属性

???? 这种情况主要是针对已经数据库表建模时,由于数据库表中采用联合自然主键(复合自然主键),为了完成这种映射需求,Hibernate使用组件类把它映射成持久化类的对象标识符。

???? Hibernate要求,作为复合对象标识符类的UserOid类必须实现Java.io.Serializable,且要用作为复合标识符的属性重写hashCode()方法和equlas()方法。

?

??? User.java

?

package com.zxf.domain;/** 用户持久化类(实体类) */public class User {    private UserOid id;                 //对象标识符(OID)    private String description;      //描述       public User(){}                 //无参数的构造方法       //以下省略所有属性的getters和setters方法...}

?

?? UserOid .java

?

?

package com.zxf.domain;/** 用户类的对象标识符类 *  必须实现Serializable和重写hashCode()和equals()方法 */public class UserOid implements java.io.Serializable {private static final long serialVersionUID = -9079299317576122433L;private String firstName;     //名private String lastName;      //姓public UserOid(){}            //无参数的构造方法//用fristName、lastName重写hashCode方法public int hashCode() {final int prime = 31;int result = 1;result = prime * result+ ((firstName == null) ? 0 : firstName.hashCode());result = prime * result+ ((lastName == null) ? 0 : lastName.hashCode());return result;}//用fristName、lastName重写equals方法public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;UserOid other = (UserOid) obj;if (firstName == null) {if (other.firstName != null)return false;} else if (!firstName.equals(other.firstName))return false;if (lastName == null) {if (other.lastName != null)return false;} else if (!lastName.equals(other.lastName))return false;return true;}//以下省略所有属性的getters和setters方法...}

?

? User.hbm.xml

?

?

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>  <!-- 映射持久化类 --><class name="com.zxf.domain.User" table="user"><!--   composite-id元素映射复合对象标识符  name属性:指定属性名  class属性:指定对应的此属性的类类型 --><composite-id name="id" column="first_name"/><key-property name="lastName" column="last_name"/></composite-id><!-- 用property映射每个普通属性 --><property name="description"/></class></hibernate-mapping>

?

?? hibernate.cfg.xml

?

?

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 数据库方言设置 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property><!-- 数据库连接参数设置 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123</property><!--实际操作数据库时是否显示SQL --><!-- <property name="hibernate.show_sql">true</property>--><property name="hibernate.format_sql">true</property><!--将数据库schema的DDL导出到数据库 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 以下定义实体类与数据库表的映像文件 --><mapping resource="com/zxf/domain/User.hbm.xml" /></session-factory></hibernate-configuration>
?

?

热点排行