使用JPA Criteria Query的SQL语法错误(OpenJPA错误?)

时间:2016-12-15 06:15:26

标签: java sql jpa openjpa

我正在尝试创建一个查询,以使用JPA条件查询恢复与用户相关的所有网站:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Site> query = cb.createQuery(Site.class);
Root<Site> fromSite = query.from(Site.class);
Join<UserSiteClientRolePK, Integer> joinUser = fromSite
    .join(Site_.siteClients)
    .join(SiteClient_.usersSitesClientsRoles)
    .join(UserSiteClientRole_.id)
    .join(UserSiteClientRolePK_.userid);
query = query.select(fromSite);
query = query.where(cb.equal(joinUser, userid));
TypedQuery<Site> typedQuery = em.createQuery(query);
List<Site> sites = typedQuery.getResultList();

然而,当我测试我的代码时,我得到了这个错误:

<openjpa-2.4.0-r422266:1674604 fatal general error> 
org.apache.openjpa.persistence.PersistenceException: 
ERROR: error de sintaxis en o cerca de «AND»

Position: 440 {prepstmnt 737085888 
SELECT ...
WHERE (t3.userid = ? AND  AND ) [params=?]} [code=0, state=42601]

出于某种原因,OpenJPA在自动生成的SQL脚本的末尾包含了错误的SQL代码“AND AND”,我无法弄清楚原因。

这让我疯了。请问有人帮帮我吗?

顺便说一句,我正在使用OpenJPA 2.4.0版。

非常感谢。亲切的问候。

1 个答案:

答案 0 :(得分:0)

您正在以错误的方式使用加入。

  

join方法返回一个对象   键入Jenny,其中:global为。{1}}   源实体和Join<X, Y>是目标   加入。

请检查此链接:

http://docs.oracle.com/javaee/6/tutorial/doc/gjivm.html#gjiuv

尝试此查询:

X