带有[

时间:2017-02-13 04:54:43

标签: hibernate hql jpql

我们在项目中使用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变量。

1 个答案:

答案 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