![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
经验技巧之Hibernate
文章平均质量分 65
daryl715
我的世界我的梦
展开
-
hibernate.properties及hibernate.cfg.xml
hibernate.properties 和 hibernate.cfg.xml是hibernate的配置文件,对于初学者,可能存在一些配置疑难。本文给出了hibernate.properties及hibernate.cfg.xml内容配置样例,二者选其一即可 hibernate.properties##---------- this is the connection and hib原创 2006-12-19 10:27:00 · 4297 阅读 · 0 评论 -
Hibernate Session对象load()方法和get()方法区别
(1)当记录不存在时候,get方法返回null,load方法产生异常(2)load方法可以返回实体的代理类,get方法则返回真是的实体类(3)load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据,而get方法只在内部缓存中查找数据,当没有在缓存中找到合适的数据时候,则生成SQL查询数据库,返回相应的实体对象原创 2007-02-08 16:56:00 · 2550 阅读 · 0 评论 -
Hibernate的Query的三种方法比较
List() 这个方法返回一个list对象,可以按照未知进行随机访问,采用这种方式要求Hibernate将所有的数据都转换成java实体对象,而不管是否用到了其中所有的对象,所以,在只有部分对象被使用时候会造成资源浪费iterator() 这个方法返回Iterator对象,只能按照从前向后顺序访问,优点是不用一次读取所有的数据都转换成java对象,避免资源浪费uniqueResu原创 2007-02-09 11:48:00 · 1617 阅读 · 0 评论 -
Hibernate HQL之动态构造实例对象
String hql="select u.name,u.password from User u";Query query=session.createQuery(hql);Iterator iter=query.iterator();while(iter.next())...{ Object obj[]=(Object[]iter.next()); System.out.println原创 2007-02-09 13:57:00 · 2182 阅读 · 0 评论 -
Hibernate中使用Criteria接口的Projections类处理聚合结果
Projections类主要用于帮助Criteria接口完成数据的分组查询和统计功能 List cats=session.createCriteria(Cat.class) .setProjection(Projections.projectionList() .add(Projections.rowCount())原创 2007-02-09 15:13:00 · 3850 阅读 · 0 评论 -
Hibernate中配置mapping文件
classpath:/com jdsy/ky/zl/domain classpath:/com jdsy/ky/domain com jdsy/ky/zl/domain/ZlStationTab.hbm.xml com jdsy/ky/zl/domain/ZlCustomer.hbm.xml com jdsy/ky/原创 2007-02-09 11:15:00 · 1268 阅读 · 0 评论 -
No CurrentSessionContext configured!" 异常解决方案
hibernate 老说没有配方言org.hibernate.dialect.MySQLDialect这句话明明就写在了配置文件里面,可老是没有写错误如下:Exception in thread "main" org.hibernate.HibernateException: Hibernate Dialect must be explicitly setname改成"hibernate.原创 2007-02-11 09:21:00 · 15323 阅读 · 4 评论 -
Hibernate中的悲观锁定和乐观锁定
锁定是为了防止多线程对同一记录进行修改时引起的数据混乱.分为两种锁定:悲观锁定和乐观锁定乐观锁定 在持久类中加入一个数值型version属性,在持久类对应的表中有一个名为version的列和该持久类对应,在映射文件中version标签必须紧接着id标签;version列实现版本控制,当修改记录时,如果传到表中的version值大于要修改的记录的version列的值,才能更新,否则不能原创 2007-02-12 13:52:00 · 979 阅读 · 0 评论 -
Hibernate中配置级联删除
首先,要在建表SQL中加入对级联删除的支持CREATE TABLE `voteitem` ( `id` varchar(50) NOT NULL default , `title` varchar(50) default NULL, `votenum` varchar(50) default NULL, `vote_id` varchar(50) NOT NULL, PRIMAR原创 2007-02-11 11:50:00 · 7835 阅读 · 2 评论 -
用每个子类一张表的方式进行Hibernate映射
同样是Student extends User, Teacher extends User也许有人会有疑问,这种和每一个具体类一张表的映射策略有什么区别呢?他们的区别在于对每个类一张表的映射策略建立在所有的表是独立的,每个表都包括了子类所自定义的属性和父类继承的属性而采取每个字类一张表的映射策略,子类所对应的表只包括子类所自定义的属性,而子类所对应的表鱼的父类所对应的表通过FK来关联,也就原创 2007-02-28 14:40:00 · 860 阅读 · 0 评论 -
Hibernate中配置EHCache
net.sf.ehcache.hibernate.Provider 如果需要在查询中使用EHCache,则配置: true 同时在需要进行缓存的对象的HBM文件中加入其中usage 可以为read-write,nonstrict-read-write,read-only最后,还要在ehcache.xml中为需要缓存的Class进行配置ehcache> cac原创 2007-02-28 10:37:00 · 1134 阅读 · 0 评论 -
Hibernate:Named query not known异常的一种解决方案
请注意标签要定义在之外之内如果定义在之内,就有可能报这个错误 hibernate-mapping> class table="class" name="cn.hxex.exam.model.Classes"> id name="id" column="id"> generator class="uuid.hex">generator> id> prop原创 2007-03-02 10:48:00 · 9951 阅读 · 2 评论 -
彻底明白Hibernate中的Inverse修正版
以前写HBM,用一对多或多对多的时候默认总是加上“inverse=true”。当时想法很简单就是由双方来维护之间的关联关系。今天才终于明白inverse的真正含义了!其实inverse不复杂,但是要真正明白还是要稍微看一下源码。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hi原创 2007-03-02 14:39:00 · 781 阅读 · 0 评论 -
根据类分层结构设计Hibernate Mapping与数据库表结构
首先,有三个实体对象User,Student, Teacher其中三者共同的属性是name,password,fullname,均定义在User中,Student和Teacher继承User用每个类分层的方式进行mapping映射,只需要用到一个表userinfo就可以描述以上关系但需要增加一个user_type字段 class table="userinfo" name="c原创 2007-02-28 14:00:00 · 1084 阅读 · 0 评论 -
Hibernate标识生成策略
increment 适用于代理主键。由Hibernate自动以递增方式生成。identity 适用于代理主键。由底层数据库生成标识符。sequence 适用于代理主键。Hibernate根据底层数据库的序列生成标识符,这要求底层数据库支持序列。hilo 适用于代理主键。Hibernate分局high/low算法生成标识符。seqh原创 2007-02-28 15:24:00 · 776 阅读 · 0 评论 -
无法保存中间表关系数据的解决方法
有这样一个多对多关系,一个老师任多门课程,一个课程有多门老师我的课程hbm文件定义如下hibernate-mapping> class table="class" name="cn.hxex.exam.model.Classes"> id name="id" column="id"> generator class="uuid.hex">generator> i原创 2007-03-02 14:28:00 · 1391 阅读 · 0 评论 -
两种针对继承的HBM文件编写方法
首先,有三个实体对象User,Student, Teacher其中三者共同的属性是name,password,fullname,均定义在User中,Student和Teacher继承User如果要在hibernate配置文件中定义上面的关系,有两种方法(1)使用 使用这种方式,三个表的字段名称必须完全相同(name,password,fullname)clas原创 2007-02-28 13:47:00 · 1243 阅读 · 0 评论 -
Hibernate三种继承映射方式的比较
比较方面 每个具体类一张表 每个分层结构一张表 每个子类一原创 2007-02-28 15:03:00 · 1170 阅读 · 0 评论 -
bernate之中inverse与cascade的异同
最近学习hibernate,重点研究了hibernate属性的inverse与cascade的联系与区别。如下,是本人的心得。 1、到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所有 cascade的关系就会被自己动的插入或是删除。便是为了能正确的c转载 2007-03-09 13:11:00 · 847 阅读 · 0 评论 -
使用hibernate的Cascade的一点经验
当在HBM文件中配置 这是的关系是一个教师有多个试卷的关系,当我们新增一个教师的时候,不需要知道教师有什么试卷,但是,反过来,当新增一个试卷的时候,不需要指定相应的教师 t=(Teacher)teacherdao.findById(t.getId(), false); paper.setTeacher(t); TestPaperDAO paperdao=(TestPape原创 2007-03-09 13:18:00 · 1075 阅读 · 0 评论 -
使用Hibernate过滤集合元素的两种方法
(1)通过代码 List list=session.createQuery("from Programer").list(); for(Iterator iter=list.iterator();iter.hasNext();) ...{ Programer p=(Programer)iter.next();原创 2007-03-09 15:44:00 · 2598 阅读 · 0 评论 -
Hibernate3的DetachedCriteria支持
Hibernate3支持DetachedCriteria,这是一个非常有意义的特性!我们知道,在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查询。 针对这种需求,对于分层应用程序来说,Web层需要传递一个查询的条件列表给业务层对象,业务层对象获得这个条件列表之后,然后依次取出条件,构造查询语句。这里的一个难点是条件转载 2007-01-16 15:02:00 · 1155 阅读 · 0 评论 -
批量定义HBM文件
property name="mappingDirectoryLocations"> list> value>classpath:/com/bjjdsy/xb/domainvalue> list> property>原创 2007-01-16 17:03:00 · 890 阅读 · 0 评论 -
Hibernate3的NativeSQL查询
对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。最简单的情况下,我们可以采用以下形式:List cats = sess.createSQLQuery("select * from cats") .addEntity(Cat.class) .list();这个查询指定了:原创 2007-03-09 14:47:00 · 1443 阅读 · 0 评论 -
Flush和Commit的理解
flush()操作的是Hibernate的缓存,将Hibernate中缓存的数据提交到DB层,如果这时候DB处于事物当中,那是DB的事情,与Hibernate无关了,commit()是告诉DB我这个事物结束了,你可以将我刚刚提交给你的数据进行更新.原创 2007-03-12 15:25:00 · 1616 阅读 · 2 评论 -
两种方式配置Hibernate复合主键(修正)
数据库结构create table component(name varchar(50) not null, sex varchar(50) not null, description varchar(50), primary key(name,sex));原创 2007-03-12 15:28:00 · 1719 阅读 · 0 评论 -
数据库连接URL中分号引发的错误
这样定义,最后的“;”是不被允许的 property name="url"> value>jdbc:mysql://localhost:3306/library?characterEncoding=gb2312&useUnicode=yes;value>property>而这样定义,最后的“;”是允许的 property name="connection原创 2007-03-07 17:11:00 · 2002 阅读 · 0 评论 -
Hibernate命令式SQL查询的两种方式
SELECT person.NAME AS {person.name}, person.AGE AS {person.age},person.SEX AS {person.sex} FROM PERSON person WHERE person.NAME LIKE :namePattern原创 2007-03-09 14:50:00 · 1275 阅读 · 2 评论 -
Hibernatec持久话对象生命周期
public class Computer implements LifeCycle{ public boolean oonSave(Session s){ System.out.println("in save"); return false; } public boolean onUpdate(Sessio原创 2007-03-09 16:34:00 · 644 阅读 · 0 评论 -
Hibernate配置文件中关于discriminator 的一点解释
背景:Container是一个抽象类,他有两个子类,但共享一张数据表,相互之间用container_type字段进行区分 这个标签主要是定义类和子类的一个识别其也就是说类和子类,用container_type字段来区分原创 2007-03-12 13:37:00 · 4138 阅读 · 0 评论 -
Hibernate根据主键读取持久化数据的三种方式
(1) load Test t=session.load(Test.class,id);(2)get Test t=session.get(Test.class,id) (3)先创建持久话对象,从数据库导出数据行 Test t=new Test(); session.load(t,id);其中load和get区别在于,load方法必须确定数据原创 2007-03-09 13:26:00 · 877 阅读 · 0 评论 -
在Hibernate3应用中如何处理批量更新和批量删除(修正版)
批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段:tx = session.beginTransaction();Iterator customers=session.find("from Customer c where c.age>0").iter原创 2007-03-09 17:14:00 · 1479 阅读 · 0 评论 -
Hibernate中抽象化主键使用教程
首先,在数据库中建立表:CREATE TABLE `container` ( `containerId` varchar(50) NOT NULL, `container_type` varchar(50) NOT NULL, `size` double default NULL, `name` varchar(50) default NULL, `description` varcha原创 2007-03-12 13:55:00 · 800 阅读 · 0 评论 -
一个十分诡异的Hibernate Mapping文件XML校验错误
最开始的代码如下: xml version="1.0" encoding="utf-8"?>DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> Mappi原创 2007-03-13 10:40:00 · 2274 阅读 · 0 评论 -
hibernate 主键生成器解释
Generator可选的子元素是一个Java类的名字, 用来为该持久化类的实例生成唯一的标识。如果这个生成器实例需要某些配置值或者初始化参数, 用元素来传递。 uid_table next_hi_value_column 所有的生成器都实现net.sf.hibernate原创 2007-03-13 11:21:00 · 2103 阅读 · 0 评论 -
使用Subselect标签构造持久类查询
前面文章阐述了,如果在Container,Box,Bottle三者的继承关系中配置HBM文件(box,bottle继承自Container)现在,有一种更加简便的方式,使数据库中不需要建立一个box。bottle共享的表,而是分别建立Box和Bottle的表,这样更加复合面向对象的思想,而查询container则通过HBM配置文件来进行Container持久类 其中Xparam,Ypar原创 2007-03-13 11:27:00 · 2638 阅读 · 0 评论 -
Hibernate 一对一主键关联实例
有两个表,product (id ,name) image(id,name)其中image的主键id引用product的主键id,建立约束,形成1对1下面的代码,将实现如下功能(1)新建image对象,新建product对象,通过保存product对象,自动对image对象进行保存,并维护完成性约束 CREATE TABLE `prod原创 2007-03-13 14:01:00 · 2302 阅读 · 0 评论 -
较为复杂的 Hibernate 数据映射
原文请见:http://www-128.ibm.com/developerworks/cn/java/l-hibernate2/ 。这里我对它做了点点优化。Hibernate 在一对一的时候,只需要 Save 主对象就可以保存从对象;在一对多的时候,通过反转(inverse="ture")也只需要 Save 主对象来保存从对象;在多对多的时候,则主从对象都得保存。针对如下图所示的对象持久化转载 2007-03-13 15:00:00 · 968 阅读 · 0 评论 -
Hibernate Map映射的index-many-to-many案例
使用Map映射,index部分可以使用组件,也可以使用持久话类,本例使用来实现使用持久话类为map映射定义index数据库结构: CREATE TABLE `team4` ( `id` varchar(50) NOT NULL, `name` varchar(50) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAUL原创 2007-03-19 14:06:00 · 2338 阅读 · 0 评论 -
Hibernate Map映射的composite-element案例
在这个案例的hbm文件中,只有一个持久话类Team,Member作为class引入,map的关系被映射到teammember表中, 数据库结构:CREATE TABLE `team5` ( `id` varchar(50) NOT NULL, `name` varchar(50) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoD原创 2007-03-19 14:32:00 · 2084 阅读 · 0 评论