(二)Hibernate3.2 中的类继承关系

(2)Hibernate3.2 中的类继承关系

主要内容:

1 简单的 Hibernate 的使用.

2 Hibernate 中 关于继承.

3 Hibernate 中的数据源.

 

个人认为类的继承和表的 one-to-one 很像。在这里就说说吧。

UserBO.hbm.xml 如下:

<hibernate-mapping>
	<class name="com.isw2.entity.UserBO" table="t_user"
		catalog="superclass" lazy="true">
		<id column="userId" name="userId">
			<generator class="native"></generator>
		</id>
		<!-- 用于在一张表里存储子类数据
			<discriminator column="userType" type="string"></discriminator>
		-->
		<property name="userName" column="userName" type="string"
			length="16">
		</property>
		<property name="userSex" column="userSex" type="string"
			length="2">
		</property>
		<!-- 这里用于在多张表里存放子类信息 -->
		<joined-subclass name="com.isw2.entity.BlueUserBO"
			table="t_blueUser">
			<key column="userId"></key>
			<property name="userLevel" column="userLevel"
				type="integer">
			</property>
		</joined-subclass>
		<joined-subclass name="com.isw2.entity.RedUserBO"
			table="t_redUser">
			<key column="userId"></key>
			<property name="userTime" column="userTime" type="date"></property>
		</joined-subclass>


		<!-- 子类在此说明,类状态由 discriminator 标签说明(用于在一张表中存储子类信息)
			<subclass name="com.isw2.entity.BlueUserBO"
			discriminator-value="blueUser">
			<property name="userLevel" column="userLevel"
			type="integer">
			</property>
			</subclass>
			<subclass name="com.isw2.entity.RedUserBO"
			discriminator-value="redUser">
			<property name="userTime" column="userTime" type="date">
			</property>
			</subclass>
		-->
	</class>

这里用到两种方式:

1一张表中存放父类,子类。

2 单独存放 父类,子类.

 

它们的关系可以被 Hibernate 识别:

	public void findAll() {
		Session session = HibernateSessionFactory.getSession();
		Query query = session.createQuery("from UserBO");
		List list = query.list();
		for (Object object : list) {
			this.displayEntity(object);
		}
		session.close();
	}

	public void addUser(UserBO userBO) {
		Session session = HibernateSessionFactory.getSession();
		Transaction tr = session.beginTransaction();
		session.save(userBO);
		tr.commit();
		session.close();
	}

 

 

 

hibernate.cfg.xml 中的相关配制:

<session-factory>
	<property name="connection.username">root</property>
	<property name="connection.url">
		jdbc:mysql://127.0.0.1:3306/superclass
	</property>
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<property name="myeclipse.connection.profile">MySQL</property>
	<property name="connection.password">123456</property>
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<!-- 输出SQL语句 -->
	<property name="show_sql">true</property>
	<!-- 设置JDBC 连接池  需添加 c3p0-0.8.4.5.jar -->
	<property name="hibernate.c3p0.max_size">20</property>
	<property name="hibernate.c3p0.min_size">5</property>
	<property name="hibernate.c3p0.timeout">1800</property>
	<property name="hibernate.c3p0.max_statements">50</property>
	<!-- 优化查询策略 -->
	<!-- 每次执行语句数量 -->
	<property name="jdbc.batch_size">50</property>
	<!-- 返回查询结果数量 -->
	<property name="jdbc.fetch_size">30</property>
	
	<mapping resource="com/isw2/entity/UserBO.hbm.xml" />

</session-factory>