H2Dialect是否支持INNER JOIN<> ON<>?

时间:2018-04-26 16:13:45

标签: java hibernate h2

我有一个实体类,其中包含许多带有INNER JOIN<>的命名查询ON<>句子,当我尝试使用JUnit执行测试时,在内存H2数据库中,我得到了这个异常:

org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join!

查询工作正常,但似乎H2Dialect不支持Inner Join这种方式,只有这样:

INNER JOIN  c.persona p

这是我的NamedQuery:

@NamedQuery(name = "name", query = "SElECT NEW MyObject(p.firstName, "
                + "p.lastName, , tp.otherName, p.id, s.description, en.name, et.name , et.number,  e.firstName, "
                + "e.lastName, e.street, e.date ) "
                + "FROM TypeC c INNER JOIN c.typeP p " + "INNER JOIN TypeTP tp ON tp.code = p.codeTP "
                + "INNER JOIN TypeS s ON s.code   = c.codeS "
                + "INNER JOIN TypeEt et ON et.code   = c.codeET "
                + "INNER JOIN TypeEN en ON en.code = c.codeEN "
                + "INNER JOIN TypeI i ON i.code = c.codeI " + "INNER JOIN i.typeE e "
                + "WHERE c.number = :NUMBER " + "AND e.code = :CODE ")

我正在使用JPA。 谁能帮助我? 提前致谢。

2 个答案:

答案 0 :(得分:0)

  1. 尝试加入而非 INNER JOIN 加入默认为内连接。
  2. 如果可能,将 H2 方言更改为另一种方法。

答案 1 :(得分:0)

我已经发现什么出错了。 TypeS,TypeET和TypeEN需要包含在persistence.xml文件中的标记" persistence-unit"如

<class>co.com.myproject.persistence.entity.TypeS </class>
<class>co.com.myproject.persistence.entity.TypeET </class>
<class>co.com.myproject.persistence.entity.TypeEN </class>

并将必要的SQL代码用于创建和填充用于生成内存h2数据库的create.sql和data.sql文件中的表。

相关问题