我们在项目中使用hibernate。我们有一个需要左外连接的查询。查询如下:
如何知道我在编写查询时使用JPQL或HQL。
我有一个场景,我必须在查询中实现左外连接。
所以我写了' 与'以及左外连接关键字。
但我得到以下例外:
org.hibernate.queryexception unexpected token with [
我读过HQL支持但不支持JPQL。所以我有两个问题:
1)如何识别JPQL或HQL以及我的项目中使用的是哪个版本? 2)如果'与'在JPQL中不支持,那么如何在具有特定属性值的两个表之间实现左外连接。
查询如下:
select v.vId,v.vName,cur.code,con.dxId from
vanTb v, regionTb r, currencyTb cur, connTb con
where
v.vNum = r.vNum
and v.vCode = r.vCode
and v.vId = cur.vId
and v.vId *= con.vId
and con.dlId = 1234 and v.status=1
* = - >在sybase ASE数据库中左外连接。
命名查询为:
select v.vId,v.vName,cur.code,con.dxId from vanTb v inner join v.regionTb r inner join
v.currencyTb left outer join v.connTb con with con.dlId = :DlId where vendor.status = 1
这里regionTb,currencyTb和connTb以及vanTb是实体bean的名称,vanTb.java有regionTb,currencyTb和connTb作为memeber变量。
答案 0 :(得分:0)
一个好的经验法则通常是,如果您的应用程序正在创建scanf( " %c" , &op );
并且您使用EntityManagerFactory
发出查询,那么您将创建基于JPQL的查询。如果您的应用程序正在创建EntityManager
并且您使用SessionFactory
发出查询,那么您通常会提供HQL。
也就是说,根据文档here,JPA 2.1,增加了对您使用Session
子句提出的问题的支持。因此,为了在JPQL中应用这样的条件,您可以写:
ON
HQL语法确实支持使用String sql = "SELECT e FROM Employee e LEFT JOIN e.address a ON a.city = :city"
Query<MyEntity> query = entityManager.createQuery( sql, MyEntity.class );
query.setParameter( "city", "New York" );
List<MyEntity> results = query.getResulList();
子句,但如下所示:
WITH