- 浏览: 375778 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
继承映射分为三种情况
1.每个子类一张表
比如说有一个Person父类,有一个Student子类,一个Teacher子类。
假如我们操作的都是Student子类或者Teacher子类,就要为Teacher和Student各建立一张表。
Person类中有一些属性,被Student和Teacher继承下来。
而Student和Teacher有自己的属性,比如salaray和score.
类声明:
根据继承原则,私有属性不能被继承。但是在我们声明Person类的时候,由于里面的getter和setter都是public,因此当在Student.hbm.xml中使用代码提示的时候,就可以看到:
这是因为Hibernate获取我们的映射对象名称是根据方法名的。具体操作方法在之前反射的内容http://alleni123.iteye.com/admin/blogs/1965343中提到过。
Teacher.hbm.xml和Student.hbm.xml
最后生成SQL语句:
Hibernate: create table test_student (id varchar2(255 char) not null, name varchar2(255 char), cardId varchar2(255 char), primary key (id))
Hibernate: create table test_teacher (id varchar2(255 char) not null, name varchar2(255 char), salary number(10,0), primary key (id))
插入
生成数据:
查询
由于Student和Teacher表都有name, 我们会想查询两个表中的所有的name列内容。
因此这里要使用多态查询,如下:
'from Person'表示将继承了Person的类所映射的表全部查询出来。
注意:
List l=query.list();
这里会报错,org.hibernate.hql.internal.ast.QuerySyntaxException: Person is not mapped [from Person]
原因是这里我们并没有定义Person的hbm文件。
解决方法是将Person的package名称加进查询语句中:
完整代码如下:
这里while循环语句输出如下:
Hibernate: select teacher0_.id as col_0_0_ from test_teacher teacher0_
Hibernate: select student0_.id as col_0_0_ from test_student student0_
extend_mapping.Teacher
eline
extend_mapping.Student
alleni
这里Hibernate分别向Person的两个子类中的对应的表发了SQL查询语句。
获取的内容也被Hibernate封装到了对应Class的类对象中。
1.每个子类一张表
比如说有一个Person父类,有一个Student子类,一个Teacher子类。
假如我们操作的都是Student子类或者Teacher子类,就要为Teacher和Student各建立一张表。
Person类中有一些属性,被Student和Teacher继承下来。
而Student和Teacher有自己的属性,比如salaray和score.
类声明:
/** * Person作为父类 */ public class Person { private String id; private String name; } /** * 继承父类Person */ public class Student extends Person { private String cardId; } public class Teacher extends Person { private int salary; }
根据继承原则,私有属性不能被继承。但是在我们声明Person类的时候,由于里面的getter和setter都是public,因此当在Student.hbm.xml中使用代码提示的时候,就可以看到:
这是因为Hibernate获取我们的映射对象名称是根据方法名的。具体操作方法在之前反射的内容http://alleni123.iteye.com/admin/blogs/1965343中提到过。
Teacher.hbm.xml和Student.hbm.xml
<hibernate-mapping package="extend_mapping"> <class name="Teacher" table="test_teacher"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="name" column="name" type="string"/> <property name="salary" column="salary" type="int"/> </class> </hibernate-mapping> <!--========================--> <hibernate-mapping package="extend_mapping"> <class name="Student" table="test_student"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="name" column="name" type="string"/> <property name="cardId" column="cardId" type="string"></property> </class> </hibernate-mapping>
最后生成SQL语句:
Hibernate: create table test_student (id varchar2(255 char) not null, name varchar2(255 char), cardId varchar2(255 char), primary key (id))
Hibernate: create table test_teacher (id varchar2(255 char) not null, name varchar2(255 char), salary number(10,0), primary key (id))
插入
Session session=HibernateUtil.openSession(); Student s=new Student(); s.setCardId("111"); s.setName("alleni"); Teacher teacher=new Teacher(); teacher.setSalary(1000); teacher.setName("eline"); session.save(s); session.save(teacher); Transaction tx=session.beginTransaction(); tx.commit();
生成数据:
查询
由于Student和Teacher表都有name, 我们会想查询两个表中的所有的name列内容。
因此这里要使用多态查询,如下:
Query query=session.createQuery("from Person");
'from Person'表示将继承了Person的类所映射的表全部查询出来。
注意:
List l=query.list();
这里会报错,org.hibernate.hql.internal.ast.QuerySyntaxException: Person is not mapped [from Person]
原因是这里我们并没有定义Person的hbm文件。
解决方法是将Person的package名称加进查询语句中:
Query query=session.createQuery("from extend_mapping.Person");
完整代码如下:
Session session=HibernateUtil.openSession(); //多态查询 Query query=session.createQuery("from extend_mapping.Person"); Iterator it=query.iterate(); while(it.hasNext()){ Person p=(Person) it.next(); System.out.println(p.getClass().getName()); System.out.println(p.getName()); } // List<Person> l=query.list(); // // System.out.println(l.size()); // // for(Person p:l){ // System.out.println(p.getName()); // }
这里while循环语句输出如下:
Hibernate: select teacher0_.id as col_0_0_ from test_teacher teacher0_
Hibernate: select student0_.id as col_0_0_ from test_student student0_
extend_mapping.Teacher
eline
extend_mapping.Student
alleni
这里Hibernate分别向Person的两个子类中的对应的表发了SQL查询语句。
获取的内容也被Hibernate封装到了对应Class的类对象中。
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3720<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1651Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1460org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 871今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 1054摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1291三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1014摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1446摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2453这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2514摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1877========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1295摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 875场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 589摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 1037摘自圣思园 19.Hibernate的对象检索策略深度解析.a ... -
Hibernate的对象检索策略 (一) SQL左外连接检索策略
2013-11-20 15:32 1136首先是测试表的结构: 先通过hibernate将数据放入 ...
相关推荐
本主题将深入探讨"Hibernate继承映射+C3P0代码"的相关知识点。 首先,让我们理解Hibernate的继承映射。在Java中,我们可以创建一个基类,然后派生出多个子类,这种设计模式在数据库中也可以被映射出来。Hibernate...
Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...
《Hibernate继承映射详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。在实际项目中,我们常常会遇到类的继承关系,而Hibernate提供了强大的支持来处理这种继承关系的...
**标题:“Hibernate继承映射(Annotation)详解”** 在Java持久化框架Hibernate中,继承映射是一种关键特性,它允许开发者将对象模型的继承结构映射到数据库的表结构。在传统的面向对象编程中,继承是实现代码复用和...
《Hibernate继承映射详解》 在Java开发中,对象关系映射(ORM)框架如Hibernate大大简化了数据库操作。Hibernate不仅提供了对基本数据类型的映射,还支持复杂的数据结构,如继承关系的映射。本篇文章将深入探讨...
本篇文章将详细探讨Hibernate继承映射的策略,特别是“每个具体类一张表”(Table Per Concrete Class)的映射方式。 在面向对象编程中,继承是常见的代码复用手段,但在关系型数据库中,这种概念并不直接对应。...
本文将详细探讨“Hibernate继承映射的第一种策略:每个类对应一张表”的概念、实现方式以及其优缺点。 首先,我们需要理解Hibernate继承映射的基本策略。在面向对象编程中,类继承是常见的代码复用手段,但在数据库...
针对hibernate的继承映射部分做了几个测试的例子,更加直观的阐述了继承映射的几种方式以及对应的表结构方式,文件被分割成3部分 http://download.csdn.net/source/259075 http://download.csdn.net/source/259072 ...
本篇主要探讨的是Hibernate中的继承映射策略,特别是“每个子类一张表”(Table per subclass)的方式。这种方式也被称为单表继承或多表继承,是Hibernate支持的四种继承映射策略之一。了解并熟练掌握这种映射模式...
### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将继承关系树的每个具体类映射到单独的数据库表中。这种方法称为**表/类映射**(Table/...
本篇文章主要探讨的是Hibernate的继承映射策略,特别是“每个类分层结构一张表”(Table per Concrete Class)的方式。这种映射策略是Hibernate提供的多种继承映射方案之一,适用于处理复杂的对象模型。 首先,我们...
在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本教程主要探讨的是Hibernate中的“继承映射...学习并实践这些例子,有助于巩固对Hibernate继承映射的理解,并提升在实际项目中的应用能力。