Я использую Liferay service builder с пользовательским запросом, который использует внутреннее соединение через две таблицы.Liferay custom cast cast issue
У меня также есть пустая служба, которая определяет модель, которая вернется.
AuditExportFinderImpl.java
public List<AuditExport> getAuditExport(String auditIds) {
SQLQuery q = buildQuery(auditIds);
List<AuditExport> audits = (List<AuditExport>)q.list();
return audits;
}
private SQLQuery buildQuery(String auditIds) {
Session session = null;
SQLQuery q = null;
try {
session = openSession();
String sql = CustomSQLUtil.get(FIND_EXPORT_AUDITS);
sql = StringUtil.replace(sql, "[$AUDIT_IDS$]", auditIds);
q = session.createSQLQuery(sql);
q.setCacheable(false);
q.addEntity("AuditExport", AuditExportImpl.class);
} finally {
closeSession(session);
}
return q;
}
default.xml (Произвольный запрос):
<custom-sql>
<sql id="findExportAudits">
<![CDATA[
SELECT
audititem.auditid,
audititem.orgid,
audititem.userid,
audititem.username,
audititem.firstname,
audititem.lastname,
audititem.createdate,
audititem.auditaction,
auditdetail.auditdetailkey,
auditdetail.auditdetailvalue
FROM audititem
INNER JOIN auditdetail ON audititem.auditid = auditdetail.auditid
WHERE audititem.auditid IN ([$AUDIT_IDS$])
]]>
</sql>
</custom-sql>
Это возвращает список Resultset (правильно ввергнуть к AuditExport
), но присоединился данные AuditDetail
таблица одинакова для каждой записи, см. ниже:
Если не используется бросание служба возвращает правильные данные, смотрите ниже (некоторые данные в масках для обеспечения конфиденциальности):
Почему тиражирование данных и как правильно ли я получаю набор результатов?
Я могу предоставить дополнительную информацию при необходимости, спасибо.
Просто отметим, что service.xml можно найти в сервисном интерфейсе и является ключевым компонентом при разработке сервисов Liferay. – dkanejs