1

次のようなサービスエンティティ宣言があります。

<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="contentrepo" ではなく宣言されたエンティティの名前を取得しています。この問題を回避する方法を教えてもらえますか?

4

1 に答える 1

1

SQLQuery が QueryPos に変換されたら、AddEntity。以下のようにコードを変更します。

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();

于 2014-12-03T11:31:05.923 に答える