电子商务系统中,设计商品数据表时,可能会通过多余字段将各种商品放置到同一个大的数据表中,此时,如何在查询时,辨别不同的商品呢?
Hibernate中,使用了Discriminator(辨别标志)来解决这个问题。
数据库ddl:
create table `sample`.`t_item`(
`id` int not null auto_increment,
`category` varchar(10),
`name` varchar(50),
`manufacturer` varchar(50),
`regioncode` varchar(30), //区域代码,用于DVD商品
`pagecount` int, //页数,用于Book商品
primary key (`id`)
);
`id` int not null auto_increment,
`category` varchar(10),
`name` varchar(50),
`manufacturer` varchar(50),
`regioncode` varchar(30), //区域代码,用于DVD商品
`pagecount` int, //页数,用于Book商品
primary key (`id`)
);
对应的TItem.hbm.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="org.hibernatetest.bean.TItem" table="t_item">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<discriminator
column = "category" //这里使用category字段辨别不同商品
type = "java.lang.String"
/>
<property name="name" type="java.lang.String">
<column name="name" length="50" />
</property>
<property name="manufacturer" type="java.lang.String">
<column name="manufacturer" length="50" />
</property>
<subclass
name = "org.hibernatetest.bean.TDVD"
discriminator-value = "2">
<property
name = "regionCode"
column = "regioncode"
/>
</subclass>
<subclass
name = "org.hibernatetest.bean.TBook"
discriminator-value = "1">
<property
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="org.hibernatetest.bean.TItem" table="t_item">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<discriminator
column = "category" //这里使用category字段辨别不同商品
type = "java.lang.String"
/>
<property name="name" type="java.lang.String">
<column name="name" length="50" />
</property>
<property name="manufacturer" type="java.lang.String">
<column name="manufacturer" length="50" />
</property>
<subclass
name = "org.hibernatetest.bean.TDVD"
discriminator-value = "2">
<property
name = "regionCode"
column = "regioncode"
/>
</subclass>
<subclass
name = "org.hibernatetest.bean.TBook"
discriminator-value = "1">
<property