2012-10-03 14 views
0

當我在MySQL中使用JPA時,下面的查詢工作正常。但是當我在ObjectDB中使用它時,它會拋出下面的異常。jpa條件似乎工作(或不),這取決於db是mysql還是objectdb

public Friendship getFriendship(String username) { 
    CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); 
    CriteriaQuery<Friendship> query = criteriaBuilder.createQuery(Friendship.class); 
    Root<Friendship> root = query.from(Friendship.class); 
    Path<String> path = root.<String>get("username"); 
    query.where(criteriaBuilder.equal(path, username)); 
    return em.createQuery(query).getSingleResult(); 
} 

誤差從瀏覽器

type Exception report 

message 

descriptionThe server encountered an internal error() that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: com.objectdb.o._PersistenceException: Unexpected query token 'FROM' (SELECT is expected) 
root cause 

com.objectdb.o._PersistenceException: Unexpected query token 'FROM' (SELECT is expected) 
root cause 

com.objectdb.o.UserException: Unexpected query token 'FROM' (SELECT is expected) 
+0

這是EclipseLink。但我認爲JPA是java界面,應該是盲目的實現?實施是否重要? – kasavbere

+0

更正:對於'objectdb'版本,我使用'com.objectdb.jpa.Provider'。對於'MySQL'版本,我使用'org.eclipse.persistence.jpa.PersistenceProvider'。顯然,它們都是'EclipseLink'。 – kasavbere

+0

在執行查詢之前,嘗試添加'criteriaBuilder.select(root);'。 – JMelnik

回答

0

如上所述正確地(並且如由錯誤信息示出) - 一個選擇缺失。

有效的JPQL查詢必須包含SELECT,否則查詢不完整。

某些JPA實現通過支持沒有SELECT的查詢來擴展標準JPQL。