電子商務系統中,設計商品數據表時,可能會通過多餘字段將各種商品放置到同一個大的數據表中,此時,如何在查詢時,辨別不同的商品呢?
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