Hibernate 学习应用
文章平均质量分 70
longgangbai
这个作者很懒,什么都没留下…
展开
-
Hibernate中的Criteria条件查询
Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如:Criteria criteria = session.createCriteria(User.class);criteria.add(Expression.eq("name","Erica");criteria.add(Expressio...2009-06-15 12:38:56 · 113 阅读 · 0 评论 -
hibernate 查询语句统一配置管理
你以前所参与的项目里面,SQL、HQL,是否满天飞呢?在逻辑层,显示层那里都可以看到随手写的查询语句?这样的做法极度的破坏了分层的架构,无论如何的XP也应该遵循一定的管理与规范,那么统一管理查询语句的重要性就凸现了。 统一管理查询语句有何优点? 1、保持系统的分层架构,管理语句是持久层的责任,由它自己管理是最适合不过。松散的耦合总是我们向往的目标。 2...2009-06-10 13:47:46 · 102 阅读 · 0 评论 -
Hibernate的一个异常的解决方案
在项目中使用HQL时的遇有多个类的嵌套比较发生的异常:错误信息如下:org.hibernate.hql.ast.InvalidWithClauseException: with-clause expressions did not reference from-clause element to which the with-clause was associated错误原因...2009-12-05 11:01:53 · 153 阅读 · 0 评论 -
Hibernate的事件和拦截器体系
持久层框架底层的拦截器机制是对诸如Spring等业务管理容器拦截机制的有益补充,使得我们可以在更低层次、更广的对象范围上进行AOP操作(Spring虽然将Hibernate纳入到其容器管理的范围内,但是并没有途径实现对其实体对象的管理)。这样就允许实现某些通用的功能,以及允许对Hibernate功能进行扩展。拦截器(Interceptors) Interceptor接口提供...原创 2009-12-01 13:53:42 · 91 阅读 · 0 评论 -
Hibernate的拦截器和监听器
最近项目需要,用到了Hibernate的拦截器和监听器,有些小小心得,和大家分享下。 首先说说这两个东西。 拦截器(Intercept):顾名思义,拦截操作,也就是在Hibernate做出动作之前会调用的方法。如果你有需要在Hibernate操作数据库之前想要做的操作,就需要用到这个东西了。 监听器(Listener):监听,就是监视Hibernate的一举一动,如果我们要获取Hibernate各...原创 2009-12-01 13:52:09 · 81 阅读 · 0 评论 -
Hibernate的拦截器和监听器
项目采用Spring构建,持久层技术采用的是 JPA规范 + Hibernate实现的方案要实现审计日志的需求,我试用了多种技术方案,最终确定了采用Hibernate 3的新特性事件驱动架构来解决:技术选型: 最土的,在所有的Dao方法中显示的编写日志记录代码该项目以前是用.net这么干的,这种做法重复工作量太大,维护性差,并且也没实现字段级变更的记录,根本不予考虑。数据库触发器 - ...原创 2009-12-01 13:50:29 · 160 阅读 · 0 评论 -
Hibernate的注解many-to-one
項目中一個實例: 最近使用annotation做hibernate映射,有两张表乘客(Passanger)表 和订单(VacationOrder )表,乘客表和订单表是ManyToOne,业务只需要从订单表出发设置不同乘客,根据乘客查看预订的订单,采用双向关联,ManyToOne 和Many-To-One VacationOrder 對象中关于乘客的注解:VacationOr...2009-11-28 12:12:24 · 192 阅读 · 0 评论 -
Hibernate Annotation几种关联映射
Hibernate Annotation几种关联映射一对一(One-To-One)使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一...2009-05-28 09:11:44 · 86 阅读 · 0 评论 -
Hibernate 3 Annotations
这些年来,Hibernate几乎已经成为java世界中数据库持久化方面事实上的标准,它强大灵活并且性能优秀.在这篇文章中,我们来看一下Java 5的注解功能怎么简单地用在你的hibernate代码中让你的持久化层变得更容易.在过去,Hibernate 依靠外部的XML文件来配置持久化对象,数据库映射文件定义在一组XML映射文件里并且在程序开始的时候被装载.有很多办法来创建这些映射文件,或者自动从一...原创 2009-05-28 08:54:57 · 101 阅读 · 0 评论 -
hibernate3的注解映射学习
注解映射必须满足两大条件:Hibernate3.2以上版本和JSEE 5。 @Entity 类注释,所有要持久化的类都要有 @Entity public class Org implements java.io.Serializable { } @Id 主键 @Id @GeneratedValue pr...2009-05-28 08:51:50 · 104 阅读 · 0 评论 -
Hibernate查询语言HQL 八大要点
本文讲述Hibernate查询语言HQL。Hibernate拥有一种功能非常强大的查询语言,这种语言被有意得与SQL非常相似,便于开发人员掌握。但不要被HQL的语法表面所迷惑,HQL完全是面向对象的,可以用来过程多态、继承、关联等关系。 Hibernate拥有一种功能非常强大的查询语言,这种语言被有意得与SQL非常相似,便于开发人员掌握。但不要被HQL的语法表面所迷惑,HQL完全是...原创 2009-11-18 13:15:45 · 73 阅读 · 0 评论 -
条件查询(Criteria Queries
条件查询(Criteria Queries具有一个直观的、可扩展的条件查询API是Hibernate的特色。 15.1. 创建一个Criteria 实例org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。 Crite...原创 2009-11-18 13:14:09 · 136 阅读 · 0 评论 -
Hibernate中Criteria的完整用法
最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。现在对 Hibernate的Criteria 的用法进行总结: Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和Det...2009-06-15 12:39:39 · 62 阅读 · 0 评论 -
Hibernate Annotation笔记
在spring中需要进行特别的声明配置Annotation风格的SessionFactory.具体见SimpleSSHF的ApplicationContext.xml @Entity将一个Javabean类声明为一个实体的数据库表映射类...也可以成为持久化POJO类,最好实现序列化 @Id注释为主键类的定义,定义在对应属性的get方法之上 @Table是类一级的注解,定义在@Entity下,为实...2009-06-24 18:58:37 · 80 阅读 · 0 评论 -
工具箱指南 - Hibernate reference 3.2
以通过一系列Eclipse插件、命令行工具和Ant任务来进行与Hibernate关联的转换。 除了Ant任务外,当前的Hibernate Tools也包含了Eclipse IDE的插件,用于与现存数据库的逆向工程。 Mapping Editor: Hibernate XML映射文件的编辑器,支持自动完成和语法高亮。它也支持对类名和属性/字段名的语义自动完成,比通常的XML编辑器方...原创 2009-08-19 10:16:57 · 123 阅读 · 0 评论 -
Hibernate使用中从数据库到模型的加载方式研究
在项目中数据库中账单Bill一个字段是有多个订单id的以逗号分隔的字符串,DAO采用HQL查询出来之后,获取订单的id集合,本人开始认为hibernate从数据库加载到模型中,会调用setXXX()方法,在setXXX中进行相应的,字符串分隔,但是我的想法错误,使用Struts2.0 在页面OGNL获取获取不到分隔后订单id集合数据。本人甚为郁闷。甚至在debug模式下在setXXX打了断点,...原创 2010-01-28 13:19:02 · 100 阅读 · 0 评论 -
hibernate中@Transient的使用
项目中可能有许多实体的需要辅助的属性和方法辅助,hibernate中实体bean中所有的非static非@Transient那么必须使用@Transient注解的属性都可以被持久化,除非你将其注解为@Transient。所有没有定义注解的属性相等于@Basic。 @Transient public BigDecimal getTotalServicePrice() ...原创 2010-01-19 15:20:37 · 281 阅读 · 0 评论 -
关于hibernate中注解和hbm共存时的加载规律
项目中使用Spring2.5+hibernate3.3+Struts2.0 注解,但是在项目的工作流中使用到工作流的配置文件hbm文件。所以研究一下注解和hbm的的加载顺序。 首先注解使用的AnnotationSessionFactoryBean 的bean:public class AnnotationSessionFactoryBean extends Loca...原创 2010-01-19 15:13:18 · 193 阅读 · 0 评论 -
hibernate查询的使用的点滴积累
/** * 前台查询酒店的级别,设备,类型 * * @param propertyName * @return */ @SuppressWarnings("unchecked") public Map<String, Integer> findByHotelInfo(final String propertyName) { final String queryStrin...原创 2010-01-09 13:04:48 · 139 阅读 · 0 评论 -
Hibernate 的HQL中一个经典函数elements的使用
在传递索引和元素给集合时(elements and indices函数)和传递子查询的结果集时,SQL函数any, some, all, exists, in都是被支持的:可编写如下Hql 语句完成查询:HQL代码 select Blog from Blog, Book where Blog.author in elements(Book.a...原创 2010-01-09 12:53:28 · 758 阅读 · 0 评论 -
Hibernate关联查询中with的经典使用
在项目采用Hibernate关联,采用关联使用比较简单,在关联时添加条件,减轻迪卡儿集的从而提高效率! 项目写HQL时使用的其中一个实例如下: StringBuilder sb = new StringBuilder(); sb.append(" from Hotel h, RoomType r left join r.roomTypeSpecialPrices as rp w...原创 2010-01-09 12:42:53 · 251 阅读 · 0 评论 -
判断数据库表每条记录中时间段是否在每一个时间段中
项目中一个成品价格表,每条记录中的价格有一个使用时间段,但是各个记录中时间段不存在交叉,判断一段时间内的价格的算法: 数据库的价格表: productprice 列字段 开始时间点 startDate 结束时间点 endDate查询 开始时间点 startDate0 结束时间点 endDate0查询使用使用算法公式:startDate <= endDate...原创 2010-01-09 12:35:05 · 222 阅读 · 0 评论 -
JPA 中注解一个父类中多个子类实现查询部分子类方法解决方法
父类:@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING)public class SettleBill extends PersistenceSupport ...原创 2010-01-09 12:10:40 · 963 阅读 · 0 评论 -
Hibernate调用执行存储过程
项目中需要采用存储过程使用代码: /** * 执行存储过程的方法(存储过程仅仅支持输入参数的使用,并且无返回值的以后扩展信息) * * @param procedureName * 存储过程的名称 * @param paramList * 备注:Map<String, Object> paramList 其中St...原创 2010-01-09 12:03:27 · 151 阅读 · 0 评论 -
JPA注解
@Column默认情况下,JPA 持续性提供程序假设每个实体的持久字段存储在其名称与持久字段的名称相匹配的数据库表列中。使用 @Column 批注:将持久字段与其他名称关联(如果默认列名难于处理、与事先存在的数据模型不兼容或作为数据库中的列名无效)将持久字段与辅助表中的列关联(请参阅 @SecondaryTable )微调数据库中列的特征表 ...2009-06-24 19:01:13 · 70 阅读 · 0 评论 -
JPA注解
@Column默认情况下,JPA 持续性提供程序假设每个实体的持久字段存储在其名称与持久字段的名称相匹配的数据库表列中。使用 @Column 批注:将持久字段与其他名称关联(如果默认列名难于处理、与事先存在的数据模型不兼容或作为数据库中的列名无效)将持久字段与辅助表中的列关联(请参阅 @SecondaryTable )微调数据库中列的特征表 ...2009-06-24 19:00:23 · 99 阅读 · 0 评论 -
Hibernate查询语言(Query Language), 即HQL
Hibernate查询语言(Query Language), 即HQLHibernate装备了一种极为有力的查询语言,(有意地)看上去很像SQL。但是别被语法蒙蔽,HQL是完全面向对象的,具备继承、多态和关联等特性。 10.1. 大小写敏感性(Case Sensitivity)除了Java类和属性名称外,查询都是大小写不敏感的。 所以, SeLeCT 和...原创 2009-11-18 13:05:58 · 96 阅读 · 0 评论 -
Hibernate中的配置属性
hbm2ddl.auto的使用配置说明:<!-- Drop and re-create the database schema on startup 每次加载hibernate的时候,重新创建数据库表结构--> <property name="hbm2ddl.auto">create</property> <!--加载hibernate...2009-11-15 17:40:21 · 69 阅读 · 0 评论 -
Hibernate JPA 的索引的使用
在Hibernate中Model中一个对象关联的对象相当多是必须使用索引,如果多个表关联更要使用关联,否则效率相等的低下,例如在项目中酒店的查询中大约有几千条数据但是查询就需要5分钟以上,实在是一个严重的效率瓶颈,采用的方案,在集合等地方添加相应的索引,加快搜索效率。 如下:针对重复几率比较大的使用索引:/** * 开始日期(YYYY-MM-DD)pr...2009-11-15 17:30:51 · 442 阅读 · 0 评论 -
Hibernate的各种保存方式的区别1
hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别: 一、预备知识: 在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient、persistent、detached 下边是常见的翻译办法: transient:瞬态或者自由态 persistent:持久化状态 detached:脱管状态或者游离态 脱...2009-03-19 19:31:48 · 84 阅读 · 0 评论 -
Hibernate 学习研究(五)
一个数据库创建一个SesssionFactory 实例,因为随意创建SessionFactory实例会占用大量的内存空间。 SessionFactory的缓存可以分为两类:内置缓存和外置缓存。SessionFactory的内置缓存中存放了...2009-03-15 22:21:31 · 89 阅读 · 0 评论 -
Hibernate 学习研究
Hibernate的xml配置文件和DTD文件的描述:(1) xml文件: 实体对象与数据库表的关联: Xxxx.hbm.xml: &am2009-03-15 22:17:03 · 76 阅读 · 0 评论 -
Hibernate 学习研究
Hibernate的使用经验总结:(1) Hibernate持久化类必须符合JavaBean的规范(包含属性)否则发生找不到此属性的异常。(Hibernate的针对布尔值的getXXX的方法可以用get 和is为前缀,但是Spring不允许以is为前缀否则出错)持久化类最好实现Serializable接口但是采用分布式结构则必须实现S...2009-03-15 22:15:09 · 69 阅读 · 0 评论 -
Hibernate 学习研究(二)
Hibernate映射类型接口: Type接口表示Hibernate映射类型。用于把域对象映射为数据库的关系数据。程序可以通过Hibernate类访问它的静态的Type实例。在通过Query接口动态绑定查询参数时,使用这中形式绑定。可供扩展的接口: &nbs...2009-03-15 22:09:45 · 94 阅读 · 0 评论 -
Hibernate 学习研究(一)
A.Java持久化的技术概念:ORM模式:在单独的持久化层由ORM中间件封装数据访问细节。ORM中间件提供对象关系映射的服务。当向数据库保存一个域对象时,把业务数据由对象形式映射为关系数据形式。当一个数据库加载一个域对象时,把业务数据由关系数据形式映射为对象形式。 B.Hibernate API简介:1. &nbs...2009-03-15 22:08:27 · 79 阅读 · 0 评论 -
Hibernate回调与拦截机制 实战
下面我实现一个利用Interceptor接口实现日志数据稽核的功能,所谓日志数据稽核就是针对一些关键操作进行记录,以便作为业务跟踪的基础依据。首先定义用于记录操作的实体:public class AudiLog implements Serializable{private String id;private String user;private String action;...2009-03-13 13:04:29 · 97 阅读 · 0 评论 -
Hibernate回调与拦截机制
在某些情况下,我们需要对实体的CURD操作进行捕获并执行一些操作,这可以通过数据库触发器来实现,但是正如我们上一节中所分析的,由于触发器的执行对Hibernate Session是透明的,因此会带来很多问题(参见上一节)。为此Hibernate提供了一些专门用于捕获监听实体CURD操作的接口,通过这些接口可以实现类似触发器的功能,能够在实体发生CURD操作时捕获事件,并且执行相应的动作逻辑。在...2009-03-13 13:03:03 · 103 阅读 · 0 评论 -
Hibernate的事务管理
Hibernate的事务管理事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰。作为一名软件设计师,必须了解事务并合理利用,以确保数据库保存正确、完整的数据。数据库向用户提供保存当前程序状态的方法,叫事务提交(commit);当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫...2009-03-13 12:40:42 · 59 阅读 · 0 评论 -
Hernate的优化方案
14.3.2.2 批量修改和删除 在Hibernate 2中,如果需要对任何数据进行修改和删除操作,都需要先执行查询操作,在得到要修改或者删除的数据后,再对该数据进行相应的操作处理。在数据量少的情况下采用这种处理方式没有问题,但需要处理大量数据的时候就可能存在以下的问题: ...2009-03-11 01:19:48 · 128 阅读 · 0 评论 -
Hibernate的性能优化
Hibernate是对JDBC的轻量级封装,因此在很多情况下Hibernate的性能比直接使用JDBC存取数据库要低。然而,通过正确的方法和策略,在使用Hibernate的时候还是可以非常接近直接使用JDBC时的效率的,并且,在有些情况下还有可能高于使用JDBC时的执行效率。 在进行Hibernate性能优...2009-03-11 01:15:07 · 87 阅读 · 0 评论