
JPA/Hibernate
零度anngle
情商不是八面玲珑的圆滑,而是德行具足后的虚心、包容和自信;成熟不是单纯到复杂的世故,而是复杂回归简单的超然;觉悟不是对世事的无所谓,而是对无能为力之事的坦然接受;成功不是追求别人眼中的最好,而是把自己能做的事情做得最好。热爱生活,热爱编程,热爱Java,喜欢探索,纸上得来终觉浅,绝知此事要躬行,愿与你一起在技术的海洋中成长!
博客:http://blog.csdn.net/zmx729618
展开
-
hibernate与mybatis异同与比较(涵盖网上各个版本,清晰明了)
一、序言 最近一直用mybatis做开发,以前用过hibernate,能感受到一些它们在使用上的区别,不过总想抽出时间来好好比较比较弄弄清楚它们各自的优劣,以便更好进行选择和深入的了解。 网上也看了很多资料,结合自己的使用体会,粗率地概括和总结了一下,以供大家参考。二、具体运用上的不同1、所需的jar包Mybatis:只需要3个(mybati转载 2016-04-28 16:40:53 · 678 阅读 · 0 评论 -
创建自定义JSR303的验证约束
由于输入验证在软件开发中是必须的一件事情,特别是与用户交互的软件产品,验证用户的潜在输入错误是必不可少的一件事情,然而各种开源的验证框架也很多,为了一统标准,jsr303规范横空出世了,它定义了一些标准的验证约束,标准毕竟是标准,它不可能定义到所有的验证约束,它只是提供了一些基本的常用的约束,不过它提供了一个可拓展的自定义验证约束。下面就来说说怎么样自定义一个约束. 为了创建一个转载 2016-06-01 16:34:40 · 4614 阅读 · 1 评论 -
SpringMVC之Validation实现(JSR303规范)
使用JSR303注解实现:一、准备校验时使用的JARvalidation-api-1.0.0.GA.jar:JDK的接口;hibernate-validator-4.2.0.Final.jar是对上述接口的实现;log4j、slf4j、slf4j-log4j 二、编写需要校验的bean@NotNull(message="名字不能为空")pr转载 2016-06-01 16:58:51 · 930 阅读 · 0 评论 -
jdbc实现对CLOB和BLOB数据类型操作
1、 读取操作CLOB java 代码Java代码 //获得数据库连接 Connection con = ConnectionFactory.getConnection(); con.setAutoCommit(false); Statement st = con.creat原创 2016-06-02 17:41:50 · 5462 阅读 · 0 评论 -
spring-data-jpa的使用
最近公司的一个项目需要使用spring-data-jpa框架,所以来学习下该框架。感觉spring对jpa的支持主要有下面两点: 1.根据JPA的规范,我们需要在类路径下的META-INF文件夹中创建persistence.xml文件,spring为我们提供了org.springframework.orm.jpa.LocalContainerEntityManagerFactoryB转载 2016-07-11 09:54:07 · 1417 阅读 · 0 评论 -
hibernate3-二级缓存配制 EHCache实战
与Session相对的是,SessionFactory也提供了相应的缓存机制。SessionFactory缓存可以依据功能和目的的不同而划分为内置缓存和外置缓存。 SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的副本,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来的。SessionFactory的内置转载 2015-08-05 10:37:48 · 1047 阅读 · 0 评论 -
Hibernate 多对多之拆分中间表增加有多个关系字段
Hibernate多对多关系中间表有其他属性的配置方式一、需求原因 在我做系统架构时遇到情况是这样:资源菜单实体类(Resource)和角色实体类(Role)是多对多关系,需要各个角色可以个性化自己的资源菜单顺序。二、设计理念多对多的关系拆分为两个一对多(以下为关系映射图)三、具体配置方式一:XML方式Role实体public class Ro转载 2016-08-04 11:19:28 · 5055 阅读 · 0 评论 -
Hibernate Transformers之三种结果转换说明
在hibernate使用的过程中,我们通常需要对结果进行解释。Hibernate为我们提供了以下3种查询结果解释方法:Transformers.ALIAS_TO_ENTITY_MAP //把输出结果转换成map Transformers.TO_LIST //把结果按顺序排进List Transformers.aliasToBean(target) //把结果通过setter方法注入到指转载 2016-11-17 15:45:48 · 5596 阅读 · 0 评论 -
Hibernate解决原生SQL映射为对象的问题探究
如何将使用本地原生SQL查询出来的结果映射为值对象的问题,这里就Hibernate中提供的方法做个结论。前提,这里没有使用属性的延迟加载技术。 假设有个值对像,如下:Java代码 package test; public class Person { private Long id; private String name; private Long age;转载 2016-11-17 16:54:14 · 2394 阅读 · 0 评论 -
Hibernate在Oracle同一SID下不同用户同名表名问题
一般来说hibernate配置数据库连接只需要下面几行配置[html] view plain copy print?##Oracle 9i/10g hibernate.dialect org.hibernate.dialect.Oracle9Dialect hibernate.connection.driver_class oracle.jd转载 2016-12-15 11:15:14 · 1476 阅读 · 0 评论 -
Hibernate session在service实现事务getCurrentSession()
我们调用Service层的一个方法的时候,它能够保证我们的这个方法中执行的所有的对数据库的更新操作保持在一个事务中,在事务层里面调用的这些方法要么全部成功,要么全部失败。那么事务的传播特性也是从这里说起的。如果你在你的Service层的这个方法中,除了调用了本类Dao层的方法之外,还调用了其他的Service方法,那么在调用其他的Service方法是需要解决这个问题:“事务是会传播的“。在Spri转载 2016-12-15 11:44:23 · 5429 阅读 · 0 评论 -
泛型<T>的类型获取
T.getClass()或者T.class都是非法的,因为T是泛型变量。由于一个类的类型是什么,是在编译期处理的,故不能在运行时直接在Base里得到T的实际类型。/** *@author zhangwenchao *@version * 可以在service层直接调用,也可以在DAO层扩展调用 */public class BaseDaoImpl implements BaseDa原创 2017-01-11 11:31:11 · 15537 阅读 · 1 评论 -
Hibernate4之二级缓存配置与使用
缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache。缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更快。 缓存的范围分为3类: 1.事务范围(单Session即一级缓存) 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的转载 2017-07-25 17:01:02 · 3038 阅读 · 0 评论 -
Hibernate使用索引及索引添加原则
1、使用Hibernate添加索引的方式 1)表上加索引 @Table(name = "T_S_USER",indexes={@Index(name="trial_idIndex",columnList="trial_id"),@Index(name="material_idIndex",columnList="material_id")})原创 2017-08-31 11:40:07 · 14446 阅读 · 0 评论 -
hibernate中的session.flush()和commit()的区别
1、flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务. 提交事务意味着对数据库所做的更新会永久保持下来 所谓清理,是指Hibernate 按照持久化象的状态来同步更新数据库 2、Flush()后只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,转载 2016-05-19 16:49:41 · 17978 阅读 · 2 评论 -
Hibernate 数据的批量插入、更新和删除
Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作。例如调用Session的delete()方法来删除持久化对象,Hibernate将负责删除对应的数据记录;当执行持久化对象的set方法时,Hibernate将自动转换为对应的update方法,修改数据库的对应记录。问题是如果需要同时更新100 000条记录,是不是要逐一加转载 2016-05-18 11:37:50 · 8242 阅读 · 0 评论 -
Hibernate监听用户操作日志
们前段时间有个.net项目需要用j2ee改造,有个需求是要对所有的数据库操作(CRUD)都要做历史记录,要记录操作内容,操作的用户和操作时间。这样的需求称为审计日志 Audit log。项目采用Spring构建,持久层技术采用的是 JPA规范 + Hibernate实现的方案要实现审计日志的需求,我试用了多种技术方案,最终确定了采用Hibernate 3的新特性事件驱动架构来解决:转载 2016-04-28 16:52:01 · 1500 阅读 · 0 评论 -
Hibernate拦截器(Interceptor)与事件监听器(Listener)
前言:由于项目中(S2SH框架)用到了memcache缓存服务器,考虑到同步问题是用每个bean变更时同时更新缓存还是用类似数据库trigger(触发器)去实现呢,答案当然是用类似trigger的方式了,其优点不言而喻,毕竟这么写一劳永逸。经调查发现,hibernate有两种方式可以实现: 拦截器(Intercept):与Struts2的拦截器机制基本一样,都转载 2016-04-28 17:38:37 · 3286 阅读 · 0 评论 -
Hibernate原生SQL查询使用addScalar()或addEntity()
Hibernate除了支持HQL查询外,还支持原生SQL查询。 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。该接口是Query接口的子接口。 执行SQL查询步骤如下: 1、获取Hibernate Session对象 2、编写S转载 2016-04-29 10:47:34 · 2358 阅读 · 0 评论 -
Hibernate Session的Flush模式
首先要知道的是:Hibernate会尽量将与数据库的操作延迟,直到必须要与数据库进行交互,例如save方法一般会在提交时才真正执行,最终在提交时会以批处理的方式与数据库进行交互,以提高效率。而将操作延迟,就是利用缓存,将最后要处理的操作放到缓存中。flush方法的主要作用就是清理缓存,强制数据库与Hibernate缓存同步,以保证数据的一致性。它的主要动作就是向数据库发送一转载 2016-04-29 10:52:50 · 654 阅读 · 0 评论 -
hibernate一级缓存详解
一级缓存的生命周期和session的生命周期一致,当前sessioin一旦关闭,一级缓存就消失,session间不能共享一级缓存的数据,因此一级缓存也叫session级的缓存或事务级缓存。一级缓存只存实体对象的 ,它不会缓存一般的对象属性(查询缓存可以),即当获得对象后,就将该对象的缓存起来,如果在同一session中如果再去获取这个对象时,它会先判断缓存中有没有该对象的id,如果有就直接从缓存中原创 2016-04-29 11:27:43 · 3090 阅读 · 0 评论 -
hibernate缓存机制详细分析(一级/二级/查询缓存)
在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题。随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存有更深的了解。一、N+1问题首先我们来探讨一下N+1的问题,我们先通过一个例子来看一下,什么是N+1问题:li转载 2016-04-29 14:19:52 · 2065 阅读 · 0 评论 -
Hibernate中get和load方法的区别
这次我们来谈一下Hibernate3.2 Session加载数据时get和load方法的区别,其实这个在网上有很多的论述,可大多语焉不详或经不起实践的推敲,让很多初学者学的满腹疑窦,现在我给大家讲解一下:1. 对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据库中没有就返回null。这个相对比较简转载 2016-04-29 14:41:22 · 461 阅读 · 0 评论 -
Hibernate和JPA的主键生成策略
主键是关系数据库中的一个基本概念,它用来保证记录的唯一性。简单来说,就是同一张数据库表中,不允许存在多条相同主键的记录。主键生成策略,就是当向数据库表中插入记录的时候,这个记录的主键该如何生成。绝大部分情况下,主键都是没有业务含义的,所以开发者不会、也不需要,显示地设置实体对象的主键值。但是对于数据库来说,主键是必须的,显然这个责任,落在了hibernate这个持久层框架上。对于初学hiberna转载 2016-04-29 16:33:43 · 832 阅读 · 0 评论 -
Hibernate乐观锁实现之Version
通过在表中及POJO中增加一个version字段来表示记录的版本,来达到多用户同时更改一条数据的冲突数据库脚本: create table studentVersion (id varchar(32),name varchar(32),ver int);POJO package Version;public class Student {转载 2016-04-29 17:05:04 · 1559 阅读 · 0 评论 -
hibernate的抓取和级联操作
@Entity@Table(name="orders") public class Order { //1-m,多的一方为关系维护端,关系维护端负责外键记录的更新,关系被维护端没有权利更新外键记录 private String orderid; private Float amount; private Set items = new HashSet(); @Id @转载 2016-04-29 17:22:06 · 719 阅读 · 0 评论 -
hibernate-tools详细使用教程(实现数据库-javabean转换)
hibernate-tools详细使用教程使用hibernate-tool的版本是hibernatetools-Update-2010-09-08_14-25-39-H23 1.在eclipse下安装好hibernate-tool插件,新建一个hibernate.cxf.xml文件 2.写好数据库连接配置 3. 4转载 2016-04-29 17:35:02 · 2616 阅读 · 0 评论 -
使用Hibernate存取大对象数据类型(clob和blob)
数据库表如下:book表id该表的主键。number类型。photo代表图书的图片,blob类型。description图书的描述,clob类型。使用 hibernate3 往 book 表插入Clob,Blob数据省略hibernate配置文件,实体映射文件和实体类代码,直接帖转载 2016-05-03 09:15:54 · 8362 阅读 · 1 评论 -
hibernate联合主键生成机制(annotation方式)
这里记录hibernate中组合主键的annotation方式。hibernate-annotations说明文档中有说到组合主键使用annotation的方式实现,如下几种下面是定义组合主键的几种语法:1. 将组件类注解为@Embeddable,并将组件的属性注解为@Id2. 将组件的属性注解为@EmbeddedId3. 将类注解为@IdClass,转载 2016-05-03 09:31:13 · 421 阅读 · 0 评论 -
Spring JPA 行级锁的实现
原文地址:http://blog.csdn.net/fengyuxue11011/article/details/47039765最近要做一个新项目,需要借助mysql的行级锁机制,又由于是第一次使用jpa去实现行级锁,所以遇到了一丢丢问题,昨天晚上用了1个多小时解决了。。分享下。。1.这是spring配置文件的内容,相信大多数人也都能从网上search到:[java] view plain co...转载 2018-03-15 17:01:04 · 4305 阅读 · 0 评论