首页 / HIBERNATE / hibernate继承实现
hibernate继承实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了hibernate继承实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7323字,纯文字阅读大概需要11分钟。
内容图文
![hibernate继承实现](/upload/InfoBanner/zyjiaocheng/1113/1fc99800f6a0447bbf80b22edd7551ef.jpg)
http://www.blogjava.net/xiaodu/archive/2008/07/11/214188.html
hiberate继承分为三种方式:一个表对应所有继承的类,具体类对应一个表,一个类对应一个表(父类及子类)
一个类对应一个表(父类及子类)
数据库脚本
CREATE TABLE `t_item1`
(
`id` int(11)
NOT NULL
AUTO_INCREMENT,
`manufacture`
varchar(20) DEFAULT
NULL,
`name`
varchar(20) DEFAULT
NULL,
PRIMARY KEY
(`id`)
) ENGINE=InnoDB DEFAULT
CHARSET=latin1 ROW_FORMAT=DYNAMIC
CREATE TABLE `t_book1`
(
`id` int(11)
NOT NULL
AUTO_INCREMENT,
`name`
varchar(20) DEFAULT
NULL,
`manufacture`
varchar(20) DEFAULT
NULL,
`pagecount`
int(11) DEFAULT
NULL,
PRIMARY KEY
(`id`)
) ENGINE=InnoDB DEFAULT
CHARSET=latin1 ROW_FORMAT=DYNAMIC COMMENT=‘InnoDB free: 3072 kB‘
CREATE TABLE `t_dvd1`
(
`id` int(11) NOT NULL
AUTO_INCREMENT,
`name` varchar(20)
DEFAULT
NULL,
`manufacture`
varchar(20) DEFAULT
NULL,
`regioncode`
varchar(20) DEFAULT
NULL,
PRIMARY KEY
(`id`)
) ENGINE=InnoDB DEFAULT
CHARSET=latin1 ROW_FORMAT=DYNAMIC
类代码
public class TItem1 implements Serializable {
private int id;
private String name;
private String manufacture;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getManufacture() {
return manufacture;
}
public void setManufacture(String manufacture) {
this.manufacture = manufacture;
}
}
public class TBook1 extends TItem1 implements Serializable {
private int pagecount;
public int getPagecount() {
return pagecount;
}
public void setPagecount(int pagecount) {
this.pagecount =
pagecount;
}
}
public class TDvd1 extends TItem1 implements Serializable {
private String
regioncode;
public String getRegioncode() {
return regioncode;
}
public void setRegioncode(String regioncode) {
this.regioncode =
regioncode;
}
}
配置文件
< ?xml version="1.0"?>
< !DOCTYPE hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
< hibernate-mapping>
< class name="mypackage.TItem1"
table="t_item1">
< id name="id" column="id">
<generator class="identity"/>
< /id>
< property
name="name" column="name"/>
< property name="manufacture"
column="manufacture"/>
< joined-subclass name="mypackage.TBook1"
table="t_book1">
<key column="id"/>
<property
name="pagecount" column="pagecount" type="java.lang.Integer"/>
< /joined-subclass>
< joined-subclass
name="mypackage.TDvd1" table="t_dvd1">
<key column="id"/>
<property name="regioncode" column="regioncode"
type="java.lang.String"/>
< /joined-subclass>
< /class>
< /hibernate-mapping>
具体类对应一个表
数据库脚本
CREATE TABLE `t_book2`
(
`id` int(11)
NOT NULL
AUTO_INCREMENT,
`name`
varchar(20) DEFAULT
NULL,
`manufacture`
varchar(20) DEFAULT
NULL,
`pagecount`
int(11) DEFAULT
NULL,
PRIMARY KEY
(`id`)
) ENGINE=MyISAM
AUTO_INCREMENT=17 DEFAULT CHARSET=latin1
CREATE TABLE `t_dvd2`
(
`id` int(11) NOT NULL
AUTO_INCREMENT,
`name` varchar(23)
DEFAULT
NULL,
`manufacture`
varchar(20) DEFAULT
NULL,
`regioncode`
varchar(20) DEFAULT
NULL,
PRIMARY KEY
(`id`)
) ENGINE=MyISAM AUTO_INCREMENT=18
DEFAULT CHARSET=latin1
类代码
public abstract class TItem2 implements java.io.Serializable {
private int id;
private String name;
private String
manufacture;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getManufacture() {
return manufacture;
}
public void setManufacture(String manufacture) {
this.manufacture = manufacture;
}
}
public class TDvd2 extends TItem2 implements Serializable {
private String regioncode;
public String getRegioncode() {
return regioncode;
}
public void setRegioncode(String regioncode) {
this.regioncode = regioncode;
}
}
public class TBook2 extends TItem2 implements Serializable {
private int pagecount;
public int getPagecount() {
return pagecount;
}
public void setPagecount(int pagecount) {
this.pagecount =
pagecount;
}
}
配置文件
< ?xml version="1.0"?>
< !DOCTYPE hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
< hibernate-mapping>
< class name="mypackage.TDvd2"
table="t_dvd2">
<id name="id" column="id">
<generator class="identity"/>
</id>
<property
name="name" column="name"/>
<property name="manufacture"
column="manufacture"/>
<property name="regioncode"
column="regioncode"/>
< /class>
< class
name="mypackage.TBook2" table="t_book2">
<id name="id"
column="id">
<generator class="identity"/>
</id>
<property name="name" column="name"/>
<property name="manufacture" column="manufacture"/>
<property
name="pagecount" column="pagecount"/>
< /class>
< /hibernate-mapping>
一个表对应所有继承的类
数据库脚本
CREATE TABLE `t_item3`
(
`id` int(11)
NOT NULL
AUTO_INCREMENT,
`name`
varchar(20) DEFAULT
NULL,
`manufacture`
varchar(20) DEFAULT
NULL,
`pagecount`
int(11) DEFAULT
NULL,
`regioncode`
varchar(20) DEFAULT
NULL,
`category`
varchar(11) DEFAULT
NULL,
PRIMARY KEY
(`id`)
) ENGINE=MyISAM
AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
类代码
public class TItem3 implements Serializable {
private int id;
private String name;
private String manufacture;
private String category;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getManufacture() {
return manufacture;
}
public void setManufacture(String manufacture) {
this.manufacture = manufacture;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category =
category;
}
}
public class TDvd3 extends TItem3 implements Serializable {
private String regioncode;
public String getRegioncode() {
return regioncode;
}
public void setRegioncode(String regioncode) {
this.regioncode = regioncode;
}
}
public class TBook3 extends TItem3 implements Serializable {
private int pagecount;
public int getPagecount() {
return pagecount;
}
public void setPagecount(int pagecount) {
this.pagecount =
pagecount;
}
}
配置文件
< ?xml version="1.0"?>
< !DOCTYPE hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
< hibernate-mapping>
< class name="mypackage.TItem3"
table="t_item3">
< id name="id" column="id">
<generator class="identity"/>
< /id>
< discriminator column="category" type="java.lang.String"/>
< property name="name" column="name"/>
< property
name="manufacture" column="manufacture"/>
< subclass
name="mypackage.TDvd3" discriminator-value="1">
<property
name="regioncode" column="regioncode"/>
< /subclass>
< subclass name="mypackage.TBook3" discriminator-value="0">
<property name="pagecount" column="pagecount"/>
< /subclass>
< /class>
< /hibernate-mapping>
三种方式的优缺点
每个类对应一个表
缺点:创建表过多,查询需用求外连接,优点:某个表字段发生变化只需修改相对表,支持多态查询,符合关系型数据库设计
具体类对应一个表
缺点:数据表包含重复字段,如果父类发生变化子类也要变化,查询父类时要查询所有子类,不支持多态查询,优点:符合关系型数据库设计
一个表对应所有类
缺点:表中引入区分子类的字段,子类的字段不能创建为空,优点:只需一张表,有很好的查询性能,只要修改一张表,支持多态查询
原文:http://www.cnblogs.com/ttjava/p/3643310.html
内容总结
以上是互联网集市为您收集整理的hibernate继承实现全部内容,希望文章能够帮你解决hibernate继承实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。