HQL与Criteria

         HQL(Hibernate Query Language)-官方推荐面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:

Query q = session.createQuery(hql);
from Person
from User user where user.name=:name
from User user where user.name=:name and user.birthday < :birthday

        Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:

Criteria crit = session.createCriteria(DomainClass.class);
//简单属性条件如:
criteria.add(Restrictions.eq(propertyName, value)),
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))

        uniqueResult方法:当session.createQuery(“from xxx where cardid=‘xxx’”).uniqueResult();返回的结果只有一个对象时,可以使用uniqueResult()得到该对象。但是,如果结果是多条,使用该方法就会抛出异常。

对象状态

  • 瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。
  • 持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。
  • 脱管/游离(detached):数据库中有数据与之对应,但当前没有session与之关联;脱管对象状态发生改变,hibernate不能检测到。

 

 

作者:|小人物大格局|,原文链接: https://www.cnblogs.com/xrwdgj/p/16299019.html

文章推荐

【clickhouse专栏】单机版的安装与验证

docker 快速上手

springboot如何使用自定义配置文件

关于区间操作查找(前缀和与差分)

Java 对象实现 Serializable 的原因

普通人如何理解递归算法

# k8s-jenkins在kubernetes中持续部署

Oracle分组取最大值

从 Git 到 Databend Fuse Engine 存储引擎

ES安装max number of threads问题

Electron+Vue3+TypeScript+Vite +Vue.

人最重要的能力是什么?