由Joe Hudson编写的一个Eclipse Plugin,和middlegen比起来,更灵活、更加与IDE集成的工具,不仅提供了一个反向提取数据库内生成hbm的工具,而且内置了一些模板,可以生成DAO, baseClass,用户可以把业务逻辑写在具体子类中,保持baseClass完全可以从hbm文件生成,从而在hbm文件有所变化的时候,自动更新baseClass的定义。它也照顾了组合主键、枚举
这算是很久之前遗留下的一个问题。在深入浅出Hibernate之前的例子里,曾经有用middlegen生成java代码,但是因为书里的例子是根据hibernate2来的,有些东西在hibernate3里找不到或是修改过了,所以ant hbm2java的时候怎么也不行,因为没有对应的Hbm2JavaTask这个类(好像是这个类名)。于是就先放着了,现在在看最后面的项目时,发现也有这么一步,于是又想起来
在实际开发中,如何对基于Hibernate的持久层实现进行进一步的性能调整,其中涉及到怎样的技术和技巧,下面需要进行探讨。性能调整的第一步,可能也是最关键的一步:性能检测。1. 性能检测从技术角度而言,除非设计上的严重缺陷,否砸,绝大部分时候,只要能发现性能瓶颈所在,总是能通过各种途径对系统进行调整,从而获得进一步的性能提升。那么如何发现系统运行中的性能缺点,并寻出其中最关键的部分?在系统的不同层
1. Hibernate分页数据分页显示,在系统实现中往往会带来较大的工作量,对于基于JDBC的程序而言,不同数据库提供的分页(部分读取)模式往往不同,也带来了数据库间可移植性上的问题。Hibernate中,通过对不同数据库的统一接口设计,实现了透明化、通用化的分页实现机制。我们可以通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围,如:
1. Lifecycle与Validatable在某些情况下,我们需要对实体对象的CRUD操作进行捕获并执行相应的处理。在数据库层,这通常通过触发器(Triger)实现。Hibernate 通过Lifecycle、Validatable接口制定了实体对象CRUD过程中的回调(CallBack)方式。Lifecycle.javapublic interface Lifecycle { /*
Hibernate的一对多,多对多映射关系。其中,Collection扮演着数据容器的重要角色。Hibernate中涉及的Collection类型共有以下几种:无序集:Set, Bag, Map有序集:List由于传统的Java Set、Map、List实现不能满足要求,Hibernate根据这些接口提供了自己的实现。这里所说的Set、Map和List,均指Hibernate中的实现版本,具体可参
数据保存:1)session.savesession.save方法用于实体对象到数据库的持久化操作。也就是说,session.save方法调用与实体对象所匹配的Insert SQL,将数据插入库表。结合一个简单实例来进行讨论:TUser user = new TUser(); user.setName("Luna"); Transaction tx = session.beginTransac
为了避免在某些情况下,关联关系所带来的无谓的性能开销。所谓延迟加载,就是在需要数据的时候,才真正执行数据加载操作。Hibernate2中的延迟加载实现主要针对:1. 实体对象。2. 集合(Collection)。Hibernate3同时提供了属性的延迟加载功能。1. 实体对象的延迟加载通过load方法可以指定可以返回目标实体对象的代理。通过cla
1. 数据加载1)session.get/loadsession.get/load方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。get采用立即加载,方法执行时,会立即向数据库发出查询语句。数据库没有对应记录返回null。load采用延迟加载,返回一个代理(此代理中只有一个id属性),只有等真正使用该对象属性时才会发出sql语句。数据库没有对应记录抛出异常ObjectN
业务逻辑的实现过程中,往往需要保证数据访问的排他性。这里就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改。Hibernate支持两种锁机制:即通常所说的“悲观锁(Pessimistic Locking)”和“乐观锁(Optimistic Locking)”。1. 悲观锁(Pessimistic Locking)指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务
事务->ACID1.Atomic原子性 【(各个操作不可分割)一个逻辑单元 】2.Consistency一致性 【 回滚rollback;合法 】3.Isolation隔离性 【 不能看到其他事务正在修改的数据(看到改之前或者该之后的数据)】 Hibernate中的事务隔离依赖于底层数据库提供的事务隔离机制,因此对数据库事务隔离机制的理解在基于Hibernate实现的持久层中同
在Hibernate中,二级缓存涵盖了应用级缓存和分布式缓存。由从属于本sessionfactory的所有session共享,因此有时也称为SessionFactory level cache。session数据查询:一级缓存->二级缓存->数据库应用二级缓存前应考虑:1.DB是否与其他应用共享(放弃使用);2.应用是否需部署在集群环境中(分布式缓存机制)数据满足条件:1.不会被第三方
3种状态:1.Transient(自由状态)与数据库中的记录无关。e.g. TUser user = new TUser();这里的user对象与数据库中的记录没有任何关联。2.Persistent(持久状态)处于由Hibernate框架所管理的状态。对应了数据库中的一条记录。与某个session实例发生了关联,并处于对应session的有效期内。e.g.a)TUser user = (TUser
创建存储过程: mysql> DELIMITER // mysql> CREATE PROCEDURE getUsersByAge(IN userAge int) -> BEGIN -> SELECT ID,NAME,AGE FROM T_USER WHERE AGE=userAge;&nb
一对一关联包括两种类型: (1)主键关联 两张关联表通过主键形成一对一映射关系。 Hibernate中,通过one-to-one节点对一对一关系进行声明。 由于采用了主键关联方式,那么通过主键关联的两张表,其关联记录的主键值须保持同步,即意味着只需为一张表设定主键生成器,而另一张表的主键与之共享相同的主键值。在Hibernate中,我们可以通过“foreign”类型
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号