- 浏览: 229885 次
- 性别:
- 来自: 武汉
最新评论
-
spp_1987:
org.springframework.beans.facto ...
Hibernate4之多对多双向关联 -
spp_1987:
后台保存订单下面 有很多订单 调了 对应什么方法 实现的?
Hibernate4之多对多双向关联 -
spp_1987:
订单 和 商品之间 有中间表存在吗???
Hibernate4之多对多双向关联 -
spp_1987:
跟 官方 hibernate4.2.5提供 的 manytom ...
Hibernate4之JPA规范配置详解 -
zhuguopei_java:
谢谢。楼主你这是解释源码吗
Struts2中action接收参数的三种方法及ModelDriven和Preparable接口结合JAVA反射机制的灵活用法
文章列表
数据库事务的定义
数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。
● 原子性(atomic),事务必须是原子工 ...
首先来认识以下J2EE常见的3种事务:
1、JDBC事务
JDBC事务是用Connection对象控制的。JDBC Connection接口(java.sql.Connection)提供了两种事务模式:自动提交和手工提交。
java.sql.Connection 提供了以下控制事务的方法:
public void setAutoCommit(bo ...
缓存:缓存是什么,解决什么问题?
位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache。缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更快。
缓存的 ...
简单地说,“inverse”决定哪一边来更新外键,而“cascade”决定接下来应该执行什么操作。在关系上来看两者看上去非常相似,但实际上是完全不同的两回事。
inverse
inverse,英文意思是反向,反转。在这里可以理解为控制反转,也就是说实体间的关系由谁控制,所以inverse用在实体关联上。如OneToOne,OneToMany,ManyToMany,在OneToMany中,如果不指定inverse,(inverse通过mappedBy来设置)那么hibernate会去找默认的表来维持关系。
这个关键字被用来决定关系的哪一方是负责维护关系的关系所有者(插入或更新外键列)
下面给 ...
Hibernate有一些fetching策略,来优化Hibernate所生成的select语句,以尽可能地提高效率。在映射关系中声明fetching策略,定义Hibernate怎样获取其相关的集合和实体。
影响关系映射抓取的cfg配置:
hibernate.max_fetch_depth
为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取.
取值 建议在0到3之间取值
hibernate.default_batch_fetch_size
为Hibernate关联的批量抓取设置默认数量.
取值 建议的取值为4 ...
假如有如下程序,需要向数据库里面加如100000条数据
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
}
tx.commit();
session.close();
这段程序大概运行到50000 ...
分页查询
Criteria crit = session.createCriteria(Order.class).setMaxResults(10).setFirstResult(1);
crit.list();
条件查询
一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。
//Restrictions.like和Restrictions.eq用法
List list = s.createCriteri ...
对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。最简单的情况下,我们可以采用以下形式:
List cats = sess.createSQLQuery( "select * from cats").addEntity(Cat.class).list();
这个查询指定了:
SQL查询字符串
查询返回的实体
这里,结果集字段名被假设为与映射文件中指明的字段名相同。对于连接了多个表的查询,这就可能造成问题,因为可能在多个表中出现同样名字的字段。下面的方法就可以避免字段名重复的问题:
...
Hibernate实现按条件查询的方式
1:最重要的按条件查询的方法是使用Query接口,使用HQL
2:本地查询(native sql):就是使用标准的sql,也是通过Query接口来实现
3:按条件查询(Query By Criteria,QBC):使用动态的,面向对象的方式 ...
Session缓存的作用:
1.减少访问数据库的频率,应用程序从内存中读取持久化对象的速度显然比到数据库查询数据的速度快多了,因此Session的缓存可以提高数据库的访问性能。
2.保证缓存中的对象与数据库中的记录保持同步,当缓存中持久化对象的状态发生了变化,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的Sql语句合并为一条sql语句,以便减少访问数据库的次数,从而提高应用程序的性能。
Hibernate中的实体对象的三种状态:
1:瞬时(Transient) - 由new操作符创建,且尚未与Hibernate Session 关联的对象被认定为瞬时的。 ...
在一个应用程序中,如果DAO层使用Spring的hibernate模板,通过Spring来控制session的生命周期,则首选getCurrentSession
使用Hibernate的大多数应用程序需要某种形式的“上下文相关的”session,特定的session在整个特定的上下文范围内始终有效。然而,对不同类型的应用程序而言,要给为什么是组成这种“上下文”下一个定义通常是困难的;不同的上下文对“当前”这个概念定义了不同的范围。在3.0版本之前,使用Hibernate的程序要么采用自行编写的基于ThreadLocal的上下文session(如下面代码),要么采用HibernateUtil ...
@Table
Table用来定义entity主表的name,catalog,schema等属性。
属性说明:
name:表名
catalog:对应关系数据库中的catalog
schema:对应关系数据库中的schema
UniqueConstraints:定义一个UniqueConstraint数组,指定需要建唯一约束的列
@Entity
@Table(name="CUST")
public class Customer { ... }
@SecondaryTable
一个entity class可以映射到多表,Seconda ...
在这里多对多关系@ManyToMany,默认是延迟加载的。
/**
* @author Chou
* @since 2012-8-8
* ...订单实体(多对多关系维护方)
*
*/
@Entity
@Table(name = "TAB_ORDER")
@SequenceGenerator(name = "seq", sequenceName = "SEQ_ORDER", allocationSize = 1)
public class Order {
private Long id;
pri ...
多个商品可以在不同的订单中出现,所以商品相对于订单是多对多关系,多对多关系需要新建一个关系表来维护他们之间的关系。
在这里多对多关系@ManyToMany,默认是延迟加载的。级联操作默认只会关联到中间表的修改和删除。
/**
* @author Chou
* @since 2012-8-8
* ...订单实体
*
*/
@Entity
@Table(name = "TAB_ORDER")
@SequenceGenerator(name = "seq", sequenceName = "SEQ_ORDER&qu ...
商品分类信息可以有很多分类信息,每个分类信息都有下级关系和上级关系,所以是一对多双向自身关联.而且当一个有下级关系的对象删除后,其下级对象都会删除。
在双向自身关联中@ManyToOne默认是非延迟加载的,所以不用配置fetch属性。
而@OneToMany默认是延迟加载的,所以需要配置fetch属性。
/**
* @author Chou
* @since 2012-8-8
* ...商品分类信息实体(一对多双向自身关联)
*
*/
@Entity
@Table(name = "TAB_GOODSCATE")
@SequenceGene ...