请教Hibernate 的 Criteria 的 in 查询

请教Hibernate 的 Criteria 的 in 查询,第1张

Hibernate中提供了三种查询方式,分别为HQL、Criteria查询、本地化SQL查询,实际应用中,有很多人忽略了Criteria的用处,觉得不如另外两种贴近SQL方式便捷,实际则未必,很多情况下Criteria更具有优势;本篇文章就对Criteria查询做一个全面的介绍,以期尽可能的将更多的Criteria强大的查询功能展现出来;

1、首先新建一个Maven Web Project项目,本次使用的是hibernate4311版本,使用MySql数据库,添加如下依赖:

[html] view plain copy

<!-- 引入mysql jar依赖 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5138</version>

</dependency>

<!-- 引入hibernate依赖 -->

<dependency>

<groupId>orghibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>4311Final</version>

</dependency>

新建完毕后,项目结构如下:

2、entity包下面放置的是通过Hibernate反向工程生成的实体映射类,samples包下面放置测试类,同样hibernatecfgxml文件需要配置,在此就不一一展示了,好了,准备工程就这么多,下面开始介绍Criteria的实际 *** 作;

3、Criteria查询

31 获取Criteria对象

[java] view plain copy

package comhibernatesamples;

import orghibernateCriteria;

import orghibernateSession;

import orghibernateSessionFactory;

import orghibernatecfgConfiguration;

import orgjunitAfter;

import orgjunitAssert;

import orgjunitBefore;

import orgjunitTest;

import comhibernateentitySlEmployee;

public class HibernateTest {

// 声明一个Hibernate Session类型的变量

private Session session;

@Before

public void getSession(){

Configuration config = new Configuration()configure();

SessionFactory sessionFactory = configbuildSessionFactory();

session = sessionFactoryopenSession();

}

@After

public void closeSession(){

if(session != null){

sessionclose();

}

}

@Test

public void doCreateCriteriaInstance(){

// 获取Criteria实例对象

Criteria criteria = sessioncreateCriteria(SlEmployeeclass);

AssertassertNotNull(criteria);

}

}

32 在SQL中,我们可以通过WHERE关键字对条件进行定义,那么在Criteria中呢?看例子

[java] view plain copy

@Test

public void doConditionQueryInCriteria() {

// 获取Criteria实例对象

Criteria criteria = sessioncreateCriteria(SlEmployeeclass);

// 查询出王姓员工且收入在3000到5000之间的

// 类似于HQL中 WHERE employeeName LIKE '王%' AND salary BETWEEN 3000 AND 5000

List emps = criteriaadd(Restrictionslike("employeeName", "王%"))

add(Restrictionsbetween("salary", 30000, 50000))list();

// 查询出工资在4000以下或5000以上的王姓员工

// 可以通过Restrictions的or或and进行逻辑分组

emps = criteriaadd(Restrictionslike("employeeName", "王%"))

add(Restrictionsor(Restrictionsgt("salary", 5000D), Restrictionslt("salary", 3000D)))list();

// 查询出岗位是软件工程师或测试工程师,且学历是硕士、本科或大专的员工有哪些

emps = criteriaadd(Restrictionsin("position", new String[] { "软件工程师", "测试工程师" }))

add(Restrictionsdisjunction()add(Restrictionseq("degree", "硕士"))add(Restrictionseq("degree", "本科"))

add(Restrictionseq("degree", "大专")))

list();

}

上述三个查询可以看出Restrictions类提供了内建Cretirion类型来满足各种查询状况,此外Criteria还有一个特别强大的功能,那就是允许你直接指定SQL查询,看例子

[html] view plain copy

List emps = criteriaadd(RestrictionssqlRestriction("birthday > '1980-01-01' AND employee_name like '刘%'"))list();

上述无论是birthday还是employee_name都是数据库中表的字段名称,看起来是不是特别好用,此外还可以直接通过属性实例构建查询条件,比如要查询出学习是高中、中专的员工有哪些:

[java] view plain copy

List emps = criteriaadd(PropertyforName("degree")in(new String[]{"高中","中专"}))list();

33 对结果集进行排序,同样可以分为上述两种方式

[java] view plain copy

List emps = criteriaadd(RestrictionssqlRestriction("birthday > '1970-01-01'"))addOrder(Orderasc("birthday"))

addOrder(Orderdesc("salary"))list();

List emps = criteriaadd(RestrictionssqlRestriction("birthday > '1970-01-01'"))

addOrder(PropertyforName("birthday")asc())addOrder(PropertyforName("salary")desc())list();

34 上述几个例子直接演示了对我们想要实体的 *** 作,大家都知道每个实体都会有好多关联实体,比如一个请假实体类会关联请假申请人与审批人、一篇博客会关联作者和分类信息实体、一个订单会关联多个商品实体,顾客实体,地址实体等,如果此时我们想通过对关联实体的限制,最终限制想要的实体,那应该怎么处理呢,看例子;

[java] view plain copy

// 比如我们想查询北京各个公司中,员工学历中包括高中、中专、大专的公司部门有哪些

List depts = criteriaadd(RestrictionssqlRestriction("dept_name LIKE '北京%'"))

createCriteria("slEmployees")add(Restrictionsin("degree", new String[]{"高中","中专","大专"}))list();

上述方法生成下列SQL文

[sql] view plain copy

from

sl_dept this_

inner join

sl_employee slemployee1_

on this_dept_id=slemployee1_DEPT_ID

where

dept_name LIKE '北京%'

and slemployee1_DEGREE in (

, ,

)

通过该实例我们可以得出:

a)可以通过createCriteria方法来通过关联实体限制最终查询实体;

b)默认采用内连接的方式关联查询

那么如果我们想采用比如左连接,右连接甚至是全外连接的话又该怎么做呢,看例子:

[java] view plain copy

List depts = criteriaadd(RestrictionssqlRestriction("dept_name LIKE '北京%'"))createAlias("slEmployees", "emps2", JoinTypeLEFT_OUTER_JOIN, Restrictionsgt("salary",60000))list();

生成SQL如下:

[sql] view plain copy

from

sl_dept this_

left outer join

sl_employee emps2x1_

on this_dept_id=emps2x1_DEPT_ID

and (

emps2x1_SALARY>

)

where

dept_name LIKE '北京%'

另外同样在createCriteria方法中也同样可以指定查询方式;

getHibernateTemplate()execute() 执行数据库 *** 作应该知道吧。

HibernateCallback()是一个回调方法,在hibernate框架下,对数据库的一种 *** 作,其实它使用很简单的,用这个方法是为了方便,为了创建session,须要在回调方法里

这个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。

程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。

HibernateCallback是一个接口,该接口只有一个方法doInHibernate(orghibernateSession session),

该方法只有一个参数Session。通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,

方法doInHibernate的方法体就是Spring执行的持久化 *** 作。

还有的就是采用:

HibernateTemplateexecute(HibernateCallback action)这种回调的方式,封装了对异常的处理和对事务的一些处理。

转录:

从点到面,讲讲hibernate查询的6种方法。分别是HQL查询

,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询。

如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是

从一个点,让我们掌握6中方法,则提供了更多选择。每一种方法都有其适用的情况与前提。

HQL查询

HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:

static void query(String name){

Session s=null;

try{

s=HibernateUtilgetSession();

//from后面是对象,不是表名

String hql="from Admin as admin where adminaname=:name";//使用命名参数,推荐使用,易读。

Query query=screateQuery(hql);

querysetString("name", name);

List<Admin> list=querylist();

for(Admin admin:list){

Systemoutprintln(admingetAname());

}

}finally{

if(s!=null)

sclose();

}

}

适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。

对象化查询Criteria方法:

static void cri(String name,String password){

Session s=null;

try{

s=HibernateUtilgetSession();

Criteria c=screateCriteria(Adminclass);

cadd(Restrictionseq("aname",name));//eq是等于,gt是大于,lt是小于,or是或

cadd(Restrictionseq("apassword", password));

List<Admin> list=clist();

for(Admin admin:list){

Systemoutprintln(admingetAname());

}

}finally{

if(s!=null)

sclose();

}

}

适用情况:面向对象 *** 作,革新了以前的数据库 *** 作方式,易读。缺点:适用面较HQL有限。

动态分离查询DetachedCriteria

static List dc(DetachedCriteria dc) {

Session s = HibernateUtilgetSession();

Criteria c = dcgetExecutableCriteria(s);

List rs = clist();

sclose();

return rs;

}

DetachedCriteria dc = DetachedCriteriaforClass(Userclass);

int id = 1;

if (id != 0)

dcadd(Restrictionseq("id", id));

Date age = new Date();

if (age != null)

dcadd(Restrictionsle("birthday", age));

List users = dc(dc);

Systemoutprintln("离线查询返回结果:" + users);

适用情况:面向对象 *** 作,分离业务与底层,不需要字段属性摄入到Dao实现层。 缺点:适用面较HQL有限。

例子查询

static List example(User user) {

Session s = HibernateUtilgetSession();

List<User> users = screateCriteria(Userclass)add(

Examplecreate(user))list();

// List<User>

// users2=screateCriteria(Userclass)add((Examplecreate(user))ignoreCase())

// createCriteria("child")add((Examplecreate(user)))list();

return users;

}

适用情况:面向对象 *** 作。 缺点:适用面较HQL有限,不推荐。

sql查询

static List sql() {

Session s = HibernateUtilgetSession();

Query q = screateSQLQuery("select from user")addEntity(Userclass);

List<User> rs = qlist();

sclose();

return rs;

}

适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法 缺点:破坏跨平台,不易维护,不面向对象。

命名查询

static List namedQuery(int id) {

Session s = HibernateUtilgetSession();

Query q = sgetNamedQuery("getUserById");

qsetInteger("id", id);

return qlist();

}

<xml version="10" encoding="utf-8">

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 30//EN"

">

hibernate 简介:

hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来 *** 纵数据库。

hibernate核心接口

session:负责被持久化对象CRUD *** 作

sessionFactory:负责初始化hibernate,创建session对象

configuration:负责配置并启动hibernate,创建SessionFactory

Transaction:负责事物相关的 *** 作

Query和Criteria接口:负责执行各种数据库查询

hibernate工作原理:

1通过Configuration config = new Configuration()configure();//读取并解析hibernatecfgxml配置文件

2由hibernatecfgxml中的<mapping resource="com/xx/Userhbmxml"/>读取并解析映射信息

3通过SessionFactory sf = configbuildSessionFactory();//创建SessionFactory

4Session session = sfopenSession();//打开Sesssion

5Transaction tx = sessionbeginTransaction();//创建并启动事务Transation

6persistent operate *** 作数据,持久化 *** 作

7txcommit();//提交事务

8关闭Session

9关闭SesstionFactory

为什么要用hibernate:

1 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2 Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

3 hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

4 hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

Hibernate是如何延迟加载get与load的区别

1 对于Hibernate get方法,Hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据 库中没有就返回null。这个相对比较简单,也没有太大的争议。主要要说明的一点就是在这个版本(bibernate32以上)中get方法也会查找二级缓存!

2 Hibernate load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true),分情况讨论:

(1)若为true,则首先在Session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由CGLIB动态生成)。等到具体使用该对象(除获取OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个ObjectNotFoundException。

(2)若为false,就跟Hibernateget方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException。

这里get和load有两个重要区别:

如果未能发现符合条件的记录,Hibernate get方法返回null,而load方法会抛出一个ObjectNotFoundException。

load方法可返回没有加载实体数据的代 理类实例,而get方法永远返回有实体数据的对象。

(对于load和get方法返回类型:好多书中都说:“get方法永远只返回实体类”,实际上并不正 确,get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加 载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数 据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。)

总之对于get和load的根本区别,一句话,hibernate对于 load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方 法,hibernate一定要获取到真实的数据,否则返回null。

Hibernate中怎样实现类之间的关系(如:一对多、多对多的关系)

类与类之间的关系主要体现在表与表之间的关系进行 *** 作,它们都市对对象进行 *** 作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、

说下Hibernate的缓存机制:

Hibernate缓存的作用:

Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据

Hibernate缓存分类:

Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存

Hibernate一级缓存又称为“Session的缓存”,它是内置的,意思就是说,只要你使用hibernate就必须使用session缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。在第一级缓存中,持久化类的每个实例都具有唯一的OID。

Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。

什么样的数据适合存放到第二级缓存中?

1 很少被修改的数据

2 不是很重要的数据,允许出现偶尔并发的数据

3 不会被并发访问的数据

4 常量数据

不适合存放到第二级缓存的数据?

1经常被修改的数据

2 绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发

3 与其他应用共享的数据。

Hibernate查找对象如何应用缓存?

当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存

删除、更新、增加数据的时候,同时更新缓存

Hibernate管理缓存实例

无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。

当随后flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步 *** 作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。

Hibernate的查询方式

Sql、Criteria,object comptosition

Hql:

1、 属性查询

2、 参数查询、命名参数查询

3、 关联查询

4、 分页查询

5、 统计函数

如何优化Hibernate?

1使用双向一对多关联,不使用单向一对多

2灵活使用单向一对多关联

3不用一对一,用多对一取代

4配置对象缓存,不使用集合缓存

5一对多集合使用Bag,多对多集合使用Set

6 继承类使用显式多态

7 表字段要少,表关联不要怕多,有二级缓存撑腰

hibernate的开发步骤:

开发步骤

1)搭建好环境

引入hibernate最小的jar包

准备Hibernatecfgxml启动配置文件

2)写实体类(pojo)

3)为实体类写映射文件"Userhbmxml"

在hibernatecfgxml添加映射的实体

4)创建库表

5)写测试类

获得Configuration

创建SessionFactory

打开Session

开启事务

使用session *** 作数据

提交事务

关闭资源

public interface Session extends SharedSessionContract,EntityManager,HibernateEntiryManager,AutoCloseable;

主要用于java 应用和hibernate之间运行时的接口;这是一个核心的持久化服务API抽象类概念;

一个session的生命周期主要由逻辑事务管理器的开始和结束界定;

session的主要作用是为映射的实体类实例提供create ,read and delete *** 作;实例可能以下面三种方式的一种状态存在:

transient:从不持久化,不与任何session关联

persistent:与一个唯一性的session关联

detached:前置持久,不与任何session关联

transient实例可能通过调用sav(),persist(),or saveOrUpdate()进行持久化;Persistent实例可能通过transient调用delete();任何实例返回一个由get()或者load()方法返回的持久化对象;Detached实例可能通过update(),saveOrUpdate(),lock() or replicate()进行实例化;在transient or detached状态下的实例也可以通过调用merge()方法,作为一个新的持久化对象进行持久化;

save()和persist()在SQL中执行的结果是INSERT,delete()在SQL中执行的结果是DELETE;update()或merge()在SQL中执行的是UPDATE。持久化实例在写入时间段被发现发生变化,且在SQL中执行了UPDATE。saveOrUpdate()和replicate()执行INSERT或者UPDATE中一种行为;

实现的类并不是线程安全的;因此,每个线程或者事务应该从sessionfactory获取自己的实例;

一个Session实例是序列化的,如果他的持久类是序列化的;

一个典型的事务管理应该使用如下的格式:

Session sess = factoryopenSession();

Transaction tx;

try{

tx = sessbeginTransaction();

//do some work

txcommit();

}catch(Exception e){

if(tx!=null)txrollback();

throw e;

}finally{

sessclose();

}

具体方法如下

All Methods Instance Methods Abstract Methods Deprecated Methods

Modifier and TypeMethod and Description

void addEventListeners ( SessionEventListener  listeners)

Add one or more listeners to the Session

SessionLockRequest buildLockRequest ( LockOptions lockOptions)

Build a LockRequest that specifies the LockMode, pessimistic lock timeout and lock scope

IdentifierLoadAccess byId ( Class  entityClass)

Create an IdentifierLoadAccess instance to retrieve the specified entity by primary key

IdentifierLoadAccess byId ( String entityName)

Create an IdentifierLoadAccess instance to retrieve the specified entity type by primary key

MultiIdentifierLoadAccess byMultipleIds ( Class  entityClass)

Create a MultiIdentifierLoadAccess instance to retrieve multiple entities at once as specified by primary key values

MultiIdentifierLoadAccess byMultipleIds ( String entityName)

Create a MultiIdentifierLoadAccess instance to retrieve multiple entities at once as specified by primary key values

NaturalIdLoadAccess byNaturalId ( Class  entityClass)

Create an NaturalIdLoadAccess instance to retrieve the specified entity by its natural id

NaturalIdLoadAccess byNaturalId ( String entityName)

Create an NaturalIdLoadAccess instance to retrieve the specified entity by its natural id

SimpleNaturalIdLoadAccess bySimpleNaturalId ( Class  entityClass)

Create an SimpleNaturalIdLoadAccess instance to retrieve the specified entity by its simple (single attribute) natural id

SimpleNaturalIdLoadAccess bySimpleNaturalId ( String entityName)

Create an SimpleNaturalIdLoadAccess instance to retrieve the specified entity by its natural id

void cancelQuery ()

Cancel the execution of the current query

void clear ()

Completely clear the session

boolean contains ( String entityName, Object object)

Check if this entity is associated with this Session

Query createFilter ( Object collection, String queryString)

Create a Query instance for the given collection and filter string

Query createNamedQuery ( String name, Class  resultType)

The JPA-defined named, typed query creation method

Query createQuery ( CriteriaDelete deleteQuery)

Query createQuery ( CriteriaQuery  criteriaQuery)

Query createQuery ( CriteriaUpdate updateQuery)

Query createQuery ( String queryString)

Create a Query instance for the given HQL/JPQL query string

Query createQuery ( String queryString, Class  resultType)

Create a typed Query instance for the given HQL/JPQL query string

void delete ( Object object)

Remove a persistent instance from the datastore

void delete ( String entityName, Object object)

Remove a persistent instance from the datastore

void disableFetchProfile ( String name)

Disable a particular fetch profile on this session

void disableFilter ( String filterName)

Disable the named filter for the current session

Connection disconnect ()

Disconnect the session from its underlying JDBC connection

 T doReturningWork ( ReturningWork  work)

Controller for allowing users to perform JDBC related work using the Connection managed by this Session

void doWork ( Work work)

Controller for allowing users to perform JDBC related work using the Connection managed by this Session

void enableFetchProfile ( String name)

Enable a particular fetch profile on this session

Filter enableFilter ( String filterName)

Enable the named filter for this current session

void evict ( Object object)

Remove this instance from the session cache

void flush ()

Force this session to flush

 T get ( Class  entityType, Serializable id)

Return the persistent instance of the given entity class with the given identifier, or null if there is no such persistent instance

 T get ( Class  entityType, Serializable id, LockMode lockMode)

Return the persistent instance of the given entity class with the given identifier, or null if there is no such persistent instance

 T get ( Class  entityType, Serializable id, LockOptions lockOptions)

Return the persistent instance of the given entity class with the given identifier, or null if there is no such persistent instance

Object get ( String entityName, Serializable id)

Return the persistent instance of the given named entity with the given identifier, or null if there is no such persistent instance

Object get ( String entityName, Serializable id, LockMode lockMode)

Return the persistent instance of the given entity class with the given identifier, or null if there is no such persistent instance

Object get ( String entityName, Serializable id, LockOptions lockOptions)

Return the persistent instance of the given entity class with the given identifier, or null if there is no such persistent instance

CacheMode getCacheMode ()

Get the current cache mode

LockMode getCurrentLockMode ( Object object)

Determine the current lock mode of the given object

Filter getEnabledFilter ( String filterName)

Retrieve a currently enabled filter by name

String getEntityName ( Object object)

Return the entity name for a persistent entity

FlushModeType getFlushMode ()

For users of the Hibernate native APIs, we've had to rename this method as defined by Hibernate historically because the JPA contract defines a method of the same name, but returning the JPA FlushModeType rather than Hibernate's FlushMode

FlushMode getHibernateFlushMode ()

Get the current flush mode for this session

Serializable getIdentifier ( Object object)

Return the identifier value of the given entity as associated with this session

LobHelper getLobHelper ()

Retrieve this session's helper/delegate for creating LOB instances

SessionFactory getSessionFactory ()

Get the session factory which created this session

SessionStatistics getStatistics ()

Get the statistics for this session

TypeHelper getTypeHelper ()

Convenience access to the TypeHelper associated with this session's SessionFactory

boolean isDefaultReadOnly ()

Will entities and proxies that are loaded into this session be made read-only by default To determine the read-only/modifiable setting for a particular entity or proxy:

boolean isDirty ()

Does this session contain any changes which must be synchronized with the database In other words, would any DML operations be executed if we flushed this session

boolean isFetchProfileEnabled ( String name)

Is a particular fetch profile enabled on this session

boolean isReadOnly ( Object entityOrProxy)

Is the specified entity or proxy read-only To get the default read-only/modifiable setting used for entities and proxies that are loaded into the session:

 T load ( Class  theClass, Serializable id)

Return the persistent instance of the given entity class with the given identifier, assuming that the instance exists

 T load ( Class  theClass, Serializable id, LockMode lockMode)

Return the persistent instance of the given entity class with the given identifier, obtaining the specified lock mode, assuming the instance exists

 T load ( Class  theClass, Serializable id, LockOptions lockOptions)

Return the persistent instance of the given entity class with the given identifier, obtaining the specified lock mode, assuming the instance exists

void load ( Object object, Serializable id)

Read the persistent state associated with the given identifier into the given transient instance

Object load ( String entityName, Serializable id)

Return the persistent instance of the given entity class with the given identifier, assuming that the instance exists

Object load ( String entityName, Serializable id, LockMode lockMode)

Return the persistent instance of the given entity class with the given identifier, obtaining the specified lock mode, assuming the instance exists

Object load ( String entityName, Serializable id, LockOptions lockOptions)

Return the persistent instance of the given entity class with the given identifier, obtaining the specified lock mode, assuming the instance exists

void lock ( Object object, LockMode lockMode)

Obtain the specified lock level upon the given object

void lock ( String entityName, Object object, LockMode lockMode)

Obtain the specified lock level upon the given object

Object merge ( Object object)

Copy the state of the given object onto the persistent object with the same identifier

Object merge ( String entityName, Object object)

Copy the state of the given object onto the persistent object with the same identifier

void persist ( Object object)

Make a transient instance persistent

void persist ( String entityName, Object object)

Make a transient instance persistent

void reconnect ( Connection connection)

Reconnect to the given JDBC connection

void refresh ( Object object)

Re-read the state of the given instance from the underlying database

void refresh ( Object object, LockMode lockMode)

Re-read the state of the given instance from the underlying database, with the givenLockMode

void refresh ( Object object, LockOptions lockOptions)

Re-read the state of the given instance from the underlying database, with the givenLockMode

void refresh ( String entityName, Object object)

Re-read the state of the given instance from the underlying database

void refresh ( String entityName, Object object, LockOptions lockOptions)

Re-read the state of the given instance from the underlying database, with the givenLockMode

void

Hibernate工作原理是Configuration读取Hibernate的配置文件和映射文件中的信息,即加载配置文件和映射文件,并通过Hibernate配置文件生成一个多线程的SessionFactory对象。

然后,多线程SessionFactory对象生成一个线程Session 对象;Session对象生成Query对象或者Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate( )等方法对PO进行加载、保存、更新、删除等 *** 作。

在查询的情况下,可通过Session 对象生成一个Query对象,然后利用Query对象执行查询 *** 作;如果没有异常,Transaction对象将提交这些 *** 作结果到数据库中。

扩展资料:

Hibernate它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来 *** 纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。

以上就是关于请教Hibernate 的 Criteria 的 in 查询全部的内容,包括:请教Hibernate 的 Criteria 的 in 查询、hibernate中一个更新方法、Hibernate有几种查询方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9348987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存