随笔分类 -  hibernate

摘要:1.创建自己的方言public class DialectRegExp extends Oracle9iDialect{public DialectRegExp(){super();this.registerFunction("my_xy", new SQLFunctionTemplate(new IntegerType(),"get_sal(?1)"));}}?1代表第一个参数,?2代表第二个参数.详情见hibernate javadoc:org.hibernate.dialect.Dialect,org.hibernate.dialect.funct 阅读全文
posted @ 2012-05-08 17:13 hibernate3例子 阅读(1850) 评论(0) 推荐(0)
摘要:在Hibernate中也可以通过SQLQuery对象调用数据库的存储过程,但是要求存储过程必须返回一个结果集。如在Oracle数据库的一个存储过程为:CREATE OR REPLACE PROCEDURE selectGuestbookById(sp_ref OUT SYS_REFCURSOR,inputId IN guestbook.id%type)ASBEGINOPEN sp_ref FOR select *from guestbook where id=inputId;END selectGuestbookById;调用的过程如下:要通过Hibernate调用selectGuestboo 阅读全文
posted @ 2012-05-08 17:07 hibernate3例子 阅读(434) 评论(0) 推荐(0)
摘要:hibernate中经常用到当多个人对同一数据同时进行修改的时候,会发生脏数据,造成数据的不一致性,解决办法是可以通过悲观锁和乐观锁来实现。悲观锁:在数据有加载的时候就给其进行加锁,直到该锁被释放掉,其他用户才可以进行修改,优点:数据的一致性保持得很好,缺点:不适合多个用户并发访问。当一个锁住的资源不被释放掉的时候,这个资源永远不会被其他用户进行修改,容易造成无限期的等待。乐观锁:就是在对数据进行修改的时候,对数据才去版本或者时间戳等方式来比较,数据是否一致性来实现加锁。优点比较好。Java代码1、在悲观锁中,只要在加载的时候,才去session中的load方法,进行枷锁,session.lo 阅读全文
posted @ 2012-05-06 14:09 hibernate3例子 阅读(677) 评论(0) 推荐(0)
摘要:Hibernate支持乐观锁。当多个事务同时对数据库表中的同一条数据操作时,如果没有加锁机制的话,就会产生脏数据(duty data)。Hibernate有2种机制可以解决这个问题:乐观锁和悲观锁。这里我们只讨论乐观锁。 Hibernate乐观锁,能自动检测多个事务对同一条数据进行的操作,并根据先胜原则,提交第一个事务,其他的事务提交时则抛出org.hibernate.StaleObjectStateException异常。 Hibernate乐观锁是怎么做到的呢? 我们先从Hibernate乐观锁的实现说起。要实现Hibenate乐观锁,我们首先要在数据库表里增加一个版本控制字段,字段名随意 阅读全文
posted @ 2012-05-06 14:04 hibernate3例子 阅读(2434) 评论(0) 推荐(1)
摘要:为什么Session需要线程绑定?比如说:扣款,一般是从数据库中查Card对象,再对卡的金额修改,两个操作,如果,查询出Card这个对象使用了一个会话,然后关闭会话,Card这个对象编程托管了,然后再开启一个会话再让这个托管的Card持久化,假如这时候,又一个扣款请求进来要求扣款,把余额扣光了,然后第一个托管的对象持久化了,然后进行扣款,由于判断余额的查询会话关闭了,所以,不会对再对余额进行判断了,扣款依旧执行。明明已经没钱了,还进行扣款,就不符合逻辑了,于是有了Session线程绑定,将一个请求的所有操作,在一个会话中进行更安全、可靠。以上只是我个人的理解,理解能力有限,有哪些不对的地方,望 阅读全文
posted @ 2012-05-06 14:00 hibernate3例子 阅读(1723) 评论(0) 推荐(0)
摘要:转自:http://sishuok.com/forum/blogPost/list/3805.html实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置batch-size,hibernate将会减少SQL语句的数量。 Hibernate可以充分有效的使用批量抓取,也就是说,如果仅一个访问代理(或集合),那么hibernate将不载入其他未实例化代理。批量抓取是延迟查询抓取的优化方案,你可以在两种批量抓取方案之间进行选择:在类级别和集合级别。 类/实 阅读全文
posted @ 2012-05-06 13:58 hibernate3例子 阅读(353) 评论(0) 推荐(0)
摘要:3. 参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: PrepareStatement pre=connection.prepare(“select * from User where user.name=?”); pre.setString(1,”zhaoxin”); ResultSet rs=pre.executeQuery(); 在Hibernate中也提供了类似这种的查询参数绑定功能,而且在Hibernate中对这个功能还提... 阅读全文
posted @ 2012-05-05 17:45 hibernate3例子 阅读(4674) 评论(0) 推荐(0)
摘要:Criteria[1]是一种比hql更面向对象的查询方式。Criteria 可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式,Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式)。 Criterion 是 Criteria 的查询条件。Criteria 提供了 add(Criterion criterion) 方法来添加查询条件。 Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleEx... 阅读全文
posted @ 2012-05-05 11:15 hibernate3例子 阅读(197) 评论(0) 推荐(0)
摘要:*HQL1.查询多个对象select art, user from Article art, User user where art.author.id = user.id and art.id =: id这种方式返回的是Object[], Object[0]:article, Object[1]:user.2.分页query.setFirstResult, query.setMaxResults.查询记录总数query.iterate("select count(*) from Person").next()3.批量更新query.executeUpdate()可能造成二 阅读全文
posted @ 2012-05-05 11:13 hibernate3例子 阅读(225) 评论(0) 推荐(0)
摘要:集合映射一.映射Set Set是一个集合接口,它的特性和数学上的集合有点类似,Set中存放的是对象的引用,继承自Collection借口.特性: 1:不允许存放重复元素。 2:元素是无序。 3:主要有HashSet,LinkedHashSet,TreeSet 3个实现Set接口的具体类。 (1).HashSet按照特定的Hash算法存取对象,效率较高,存取对象的速度快。 (2).LinkedHashSet是HashSet的子类,它使用链表数据结构存取,与HashSet不同之处在于LinkHashSet中的元素具有固定的顺序 (3).TreeSet是一个具有排序功能的集合,实现了Sorted接. 阅读全文
posted @ 2012-05-02 10:10 hibernate3例子 阅读(268) 评论(0) 推荐(0)
摘要:如果用xml的话 需要三个目录的jar包 1、 根目录的 hibernate3.jar包 2、 lib\required 目录下 全部引入 3、 还需另外下载slf4j的slf4j-nop-1.5.8.jar(不是hibernate自带的)如果是annotation 的话只需在引入hibernate-distribution-3.5.6-Final\lib\jpa目录下的 hibernate-jpa-2.0-api-1.0.0.Final.jar包转自:http://erchong2011.iteye.com/blog/968729 阅读全文
posted @ 2012-04-30 17:26 hibernate3例子 阅读(238) 评论(0) 推荐(0)
摘要:get与load都可以根据参数获取到指定的实体,那他们有什么区别呢??从Hibernate的参考手册中,我们基本可以总结出这样几条:1、如果找不到符合条件的记录,get方法返回null,而load方法抛出异常2、使用load方法,一般都假定你要取得对象肯定是存在的,而get方法则尝试,如果不存在,就返回null从这个角度看,似乎没什么大不了的。其实,仔细看看hibernate中关于get和load方法的源码,就不难发现,这背后的不同了。get方法每次都要访问数据库,而load则不一定,如果使用了缓存机制,load就会从缓存中查找,所以,不一定每次都访问数据库。也就是,load可以更好的利用hi 阅读全文
posted @ 2012-04-20 09:14 hibernate3例子 阅读(322) 评论(0) 推荐(0)
摘要:Hibernate 配置属性属性名用途hibernate.dialect允许 Hibernate 针对特定的关系数据库生成优化的 SQL 的org.hibernate.dialect.Dialect的类名。例如:full.classname.of.Dialect在大多数情况下,Hibernate 可以根据 JDBC 驱动返回的JDBC metadata选择正确的org.hibernate.dialect.Dialect实现。hibernate.show_sql输出所有 SQL 语句到控制台。有一个另外的选择是把org.hibernate.SQL这个 log category设为debug。例如 阅读全文
posted @ 2012-04-19 10:50 hibernate3例子 阅读(866) 评论(0) 推荐(0)
摘要:increment用于为long,short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。identity对 DB2,MySQL,MS SQL Server,Sybase 和 HypersonicSQL 的内置标识字段提供支持。返回的标识符是long,short或者int类型的。sequence在 DB2,PostgreSQL,Oracle,SAP DB,McKoi 中使用序列(sequence), 而在 Interbase 中使用生成器(generator)。返回的标识符是long,short或者int类型的。hilo使用一个高/低位算法高 阅读全文
posted @ 2012-04-19 10:37 hibernate3例子 阅读(408) 评论(0) 推荐(0)
摘要:使用hibernate实现树形结构无限级分类 在系统中,经常会用到无限级的树形结构分类,如组织机构管理、商品/地区分类等等。一般无外采用两种方式: 一是类似struts-menu(http://struts-menu.sourceforge.net)的XML文件管理方式,配置起来比较方便,但很难与系统中其它应用数据集成; 二是使用数据库存储,定义父子关系。 在我们现在开发的一个产品中,使用hibernate实现了一套树形结构的处理方法,简介如下: ... 阅读全文
posted @ 2007-10-27 18:04 hibernate3例子 阅读(180) 评论(0) 推荐(0)
摘要:update和saveOrUpdate详解先来点概念: 在Hibernate中,最核心的概念就是对PO的状态管理。一个PO有三种状态: 1、未被持久化的VO 此时就是一个内存对象VO,由JVM管理生命周期 2、已被持久化的PO,并且在Session生命周期内 此时映射数据库数据,由数据库管理生命周期 3、曾被持久化过,但现在和Session已经detached了,以VO的身份在运行 这种和Session已经detached的PO还能够进入另一个Session,继续进行PO状态管理,此时它就成为PO的第二种状态了。这种PO实际上是跨了Session进行了状态维护的。 在传统的JDO1.x中,PO 阅读全文
posted @ 2007-10-27 18:03 hibernate3例子 阅读(266) 评论(0) 推荐(0)
摘要:Hibernate为什么如此成功?Why This Project Is Successful 这篇文章是Gavin King写的,非常有趣,充分体现了Hibernate的设计理念,我粗略的意译如下: 下面是对Hibernate开发工作的个人想法,正是这些工作使得Hibernate如此迅速的得到广泛的欢迎。 1、飞快的版本发布 保持活跃的开发速度,经常进行版本发布,甚至几天之内就从前一个版本开发到下一个版本。这样是保证软件远离Bug的最好的办法,也可以让用户感到很放心,确信Hibernate的开发十分活跃,另外这样做也有一大好处,就是可以发现哪些功能是用户真正需要的。 2、回归测试 我想现在整 阅读全文
posted @ 2007-10-27 18:02 hibernate3例子 阅读(243) 评论(0) 推荐(0)
摘要:struts+hibernate项目debug总结javax.servlet.ServletException: Cannot retrieve mapping for action /companyNews struts-config.xml中没有写相关companyNews的action. ============================================在myeclipse增加一个jar包时候,先打开项目properties,选择java build path --> libraries -->add external JARs 选择到需要的jar包,加 阅读全文
posted @ 2007-10-27 01:17 hibernate3例子 阅读(281) 评论(0) 推荐(0)