当前位置: 代码迷 >> 综合 >> JPA EntityManager 自定义语句执行方法:createQuery/createNativeQuery
  详细解决方案

JPA EntityManager 自定义语句执行方法:createQuery/createNativeQuery

热度:91   发布时间:2023-12-18 09:25:18.0

EntityManager.createQuery()/createNativeQuery()函数的好处是可以根据参数匹配条件,动态生产sql语句去执行。
几个通用方法:
1.生产Query对象:
Query query=EntityManager.createQuery(sql)/createNativeQuery(sql)
2.设置分页:
query.setFirstResult(第几页offset)
query.setMaxResult(每页容量limit)
3.执行Query:
query.getResultList()
query.getSingleResult()
query.executeUpdate

createQuery:执行非原生sql
1.可以调用类,将查询的值封装到一个新的实体类中,类似JpaRepository中非native的@Query使用方式。注意new 类的时候需要补齐类的全名(包路径),否则找不到该类的构造函数。
2.如果遇到数据库内置函数,例如pg:ST_Intersects(‘参数1’,‘参数2’),直接写原生语句会报错,需要借助function函数:
function('ST_Intersects','参数1','参数2')='t'

createNativeQuery:执行原生sql
1.数据库里能用这里就能用
2.想将查询结果放到一个新的类中会报错:这个不是个实体类,通过.umwrap()方法解决

Query dataQuery=entityManager.createNativeQuery(sql);
List<T> result=dataQuery.unwrap(org.hibernate.query.internal.NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).getResultList();