DetachedCriteria的用法,

DetachedCriteria的用法,,第1张

Criteria和DetachedCriteria的主要区别在于创建的形式不一样,Criteria是在线的,所以它是由HibernateSession进行创建的;而DetachedCriteria是离线的,创建时无需Session,DetachedCriteria提供了2个静态方法forClass(Class)或forEntityName(Name)进行DetachedCriteria实例的创建。Spring的框架提供了getHibernateTemplate()findByCriteria(detachedCriteria)方法可以很方便地根据DetachedCriteria来返回查询结果。Criteria和DetachedCriteria均可使用Criterion和Projection设置查询条件。可以设置FetchMode(联合查询抓取的模式),设置排序方式。对于Criteria还可以设置FlushModel(冲刷Session的方式)和LockMode(数据库锁模式)。下面对Criterion和Projection进行详细说明。Criterion是Criteria的查询条件。Criteria提供了add(Criterioncriterion)方法来添加查询条件。Criterion接口的主要实现包括:Example、Junction和SimpleExpression。而Junction的实际使用是它的两个子类conjunction和disjunction,分别是使用AND和OR *** 作符进行来联结查询条件集合。Criterion的实例可以通过Restrictions工具类来创建,Restrictions提供了大量的静态方法,如eq(等于)、ge(大于等于)、between等来方法的创建Criterion查询条件(SimpleExpression实例)。除此之外,Restrictions还提供了方法来创建conjunction和disjunction实例,通过往该实例的add(Criteria)方法来增加查询条件形成一个查询条件集合。至于Example的创建有所不同,Example本身提供了一个静态方法create(Objectentity),即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设置一些过滤条件:ExampleexampleUser=Examplecreate(u)ignoreCase()//忽略大小写enableLike(MatchModeANYWHERE);//对String类型的属性,无论在那里值在那里都匹配。相当于%value%Project主要是让Criteria能够进行报表查询,并可以实现分组。Project主要有SimpleProjection、ProjectionList和Property三个实现。其中SimpleProjection和ProjectionList的实例化是由内建的Projections来完成,如提供的avg、count、max、min、sum可以让开发者很容易对某个字段进行统计查询。Property是对某个字段进行查询条件的设置,如通过PorpertyforName(“color”)in(newString[]{“black”,”red”,”write”});则可以创建一个Project实例。通过criteria的add(Project)方法加入到查询条件中去。使用Criteria进行查询,主要要清晰的是Hibernate提供了那些类和方法来满足开发中查询条件的创建和组装,下面介绍几种用法:1创建一个Criteria实例orghibernateCriteria接口表示特定持久类的一个查询。Session是Criteria实例的工厂。Criteriacrit=sesscreateCriteria(Catclass);critsetMaxResults(50);Listcats=critlist();2限制结果集内容一个单独的查询条件是orghibernatecriterionCriterion接口的一个实例。orghibernatecriterionRestrictions类定义了获得某些内置Criterion类型的工厂方法。Listcats=sesscreateCriteria(Catclass)add(Restrictionslike("name","Fritz%"))add(Restrictionsbetween("weight",minWeight,maxWeight))list();约束可以按逻辑分组。Listcats=sesscreateCriteria(Catclass)add(Restrictionslike("name","Fritz%"))add(Restrictionsor(Restrictionseq("age",newInteger(0)),RestrictionsisNull("age")))list();Listcats=sesscreateCriteria(Catclass)add(Restrictionsin("name",newString[]{"Fritz","Izi","Pk"}))add(Restrictionsdisjunction()add(RestrictionsisNull("age"))add(Restrictionseq("age",newInteger(0)))add(Restrictionseq("age",newInteger(1)))add(Restrictionseq("age",newInteger(2)))))list();Hibernate提供了相当多的内置criterion类型(Restrictions子类),但是尤其有用的是可以允许你直接使用SQL。Listcats=sesscreateCriteria(Catclass)add(Restrictionssql("lower({alias}name)likelower()","Fritz%",HibernateSTRING))list();{alias}占位符应当被替换为被查询实体的列别名。Property实例是获得一个条件的另外一种途径。你可以通过调用PropertyforName()创建一个Property。Propertyage=PropertyforName("age");Listcats=sesscreateCriteria(Catclass)add(Restrictionsdisjunction()add(ageisNull())add(ageeq(newInteger(0)))add(ageeq(newInteger(1)))add(ageeq(newInteger(2)))))add(PropertyforName("name")in(newString[]{"Fritz","Izi","Pk"}))list();3结果集排序你可以使用orghibernatecriterionOrder来为查询结果排序。Listcats=sesscreateCriteria(Catclass)add(Restrictionslike("name","F%")addOrder(Orderasc("name"))addOrder(Orderdesc("age"))setMaxResults(50)list();Listcats=sesscreateCriteria(Catclass)add(PropertyforName("name")like("F%"))addOrder(PropertyforName("name")asc())addOrder(PropertyforName("age")desc())setMaxResults(50)list();

Caseinfo_tab应用了乐观锁,错误原因:在进行 *** 作时,当前的version版本与数据库中的version版本不一致;可能是其他应用也使用到这条记录,并进行了更新或者删除 *** 作;

求采纳

根据你贴出来的日志来看,应该是你要检索的数据已经被锁定了,而且一直未释放锁从而导致了你的锁等待超时,这个是悲观锁的缺陷了,会影响系统的并发性(如果有人一直不释放锁,那么其他用户就无法锁定该条记录了)

在oracle中,有个解决方案

select for update nowait

nowait的含义是“不用等待,立即返回”

如果当前请求的资源被其他会话锁定时,会发生阻塞,但是如果使用nowait就不会去等待锁释放,立即返回空的结果,那么就不会出现等待超时

不知道有没有帮到你

可以的

在TransactionDefinition接口中定义了五个不同的事务隔离级别:

1) ISOLATION_DEFAULT 这是一个 PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别另外四个与JDBC的隔离级别相对应

2) ISOLATION_READ_UNCOMMITTED这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。

要用事务提交啊 还是建议用session对象吧,

Session s=HibernateSessionFactorygetSession();

supdate(pojo);

Transaction tx=sbeginTransaction();

txcommit();

不过用spring的IOC可以得到解决,

以上就是关于DetachedCriteria的用法,全部的内容,包括:DetachedCriteria的用法,、Hibernate 乐观锁报错、hibernate 悲观锁执行后报什么异常等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/9532285.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存