2014-12-02 20 views
1

我有一個服務實體的聲明是如下:Liferay的CustomSQL表不存在

<entity name="MyContentRepo" local-service="true" remote-service="true" table="contentrepo"> 
</entity> 

我想使用自定義SQL來獲取一些細節:

session = openSession(); 
String sqlQueryString = CustomSQLUtil.get("query_id"); 
SQLQuery query = session.createSQLQuery(sqlQueryString); 
query.addEntity("MyContentRepo", MyContentRepoImpl.class); 
QueryPos qPos = QueryPos.getInstance(query); 
qPos.add("someparameter"); 
list = (List<MyContentRepo>) query.list(); 

,但我得到執行時出現以下錯誤:

08:02:26,640 ERROR [http-bio-8090-exec-72][JDBCExceptionReporter:82] Table 'mysqldb.mycontentrepo' doesn't exist 
com.liferay.portal.kernel.dao.orm.ORMException: org.hibernate.exception.SQLGrammarException: could not execute query 

該查詢取的聲明的實體名稱不是table =「contentrep ○」。誰能告訴我如何繞過這個問題?

+0

按https://docs.jboss.org/hibernate/orm/3.6/javadocs/ org/hibernate/SQLQuery.html#addEntity%28java.lang.String,%20java.lang.Class%29你必須在addEntity方法中提供第一個參數作爲表別名。嘗試給表名稱本身它應該工作 – 2014-12-02 17:28:17

回答

1

AddQuery將SQLQuery轉換爲QueryPos。更改您的代碼下面給出:

session = openSession();

String sqlQueryString = CustomSQLUtil.get("query_id"); SQLQuery query = session.createSQLQuery(sqlQueryString);

QueryPos qPos = QueryPos.getInstance(query); qPos.add("someparameter");

query.addEntity("MyContentRepo", MyContentRepoImpl.class); list = (List<MyContentRepo>) query.list();