hibernate层次设计(2)

昨天我们了解了怎么使用hibernate来进行层次设计,今天我们再来了解另外一种方法实现层次设计,这就是通过在表内置入标志来实现。在hibernate的映射文件中我们通过descriminator标签来进行实现。

废话不多说,我们直接看例子:

我们把昨天的TItem的映射文件修改为:

<class name="TItem" table="ITEM" polymorphism="explicit">
		<id name="id" column="id" type="java.lang.Integer">
			<generator class="native" />
		</id>
		 <discriminator column="category" type="java.lang.String"/>
		 
		 <property name="name" column="name" type="java.lang.String"/>
		 <property name="manufacture" column="manufacture" type="java.lang.String"/>		 
	</class>

  看到中间,我们加入了一个discriminator标签,它表明我们以下的两个subclass通过哪个字段来进行区别。

 <subclass name="TBook" discriminator-value="1">
		 	<property name="pageCount" column="pageCount"/>
		 </subclass>
		 <subclass name="TDVD" discriminator-value="2" >
		 	<property name="regionCode" column="regionCode"/>
		 </subclass>

  我们看到这两段,它指明了当discriminator所指定的field的值为1时,表明它是TBook类,并且pageCount有值;当discriminator所指定的field值为2时,表明它是TDVD类,并且regionCode有值。

这样我们就只需要用到一个表,就表明了它们几个类的关系了,注意,这种方式对有过多子类的情况下,并不好,它会使主表的字段过多,会造成一定的设计上的不便。如果有过多的子类,还是建议各个子类对应各自的表,保留它们的单独字段,如http://cxshun.iteye.com/blog/1054004的第二种方法。

猜你喜欢

转载自cxshun.iteye.com/blog/1054603