Liferay 自定义查询转换问题
Liferay custom query cast issue
我将 Liferay 服务构建器与自定义查询一起使用,该查询使用跨两个 table 的内部联接。
我还有一个空白服务,它定义了 return 的模型。
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>
这 return 是结果集列表(正确转换为 AuditExport
)但是连接的数据 AuditDetail
table 对于每条记录都是相同的,见下文:
当不使用投射服务时 returns 正确的数据,见下文(一些数据为了隐私而被屏蔽):
为什么要复制数据以及如何正确转换结果集?
如果需要我可以提供更多信息,谢谢。
好的,所以我的问题出在 service.xml.
在我投射的模型中(在 service.xml
中定义)也只有 AuditId
定义为主键,但我正在检索包含许多主键的数据集。
为了解决这个问题,我在 service.xml
中定义了 AudiId
和 AudiDetailKey
的复合键,然后正确地转换了数据集。
我将 Liferay 服务构建器与自定义查询一起使用,该查询使用跨两个 table 的内部联接。
我还有一个空白服务,它定义了 return 的模型。
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>
这 return 是结果集列表(正确转换为 AuditExport
)但是连接的数据 AuditDetail
table 对于每条记录都是相同的,见下文:
当不使用投射服务时 returns 正确的数据,见下文(一些数据为了隐私而被屏蔽):
为什么要复制数据以及如何正确转换结果集?
如果需要我可以提供更多信息,谢谢。
好的,所以我的问题出在 service.xml.
在我投射的模型中(在 service.xml
中定义)也只有 AuditId
定义为主键,但我正在检索包含许多主键的数据集。
为了解决这个问题,我在 service.xml
中定义了 AudiId
和 AudiDetailKey
的复合键,然后正确地转换了数据集。