2015-01-21 3 views
0

Я использую 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 таблица одинакова для каждой записи, см. ниже:

Using a cast to AuditExport

Если не используется бросание служба возвращает правильные данные, смотрите ниже (некоторые данные в масках для обеспечения конфиденциальности):

Without a cast

Почему тиражирование данных и как правильно ли я получаю набор результатов?

Я могу предоставить дополнительную информацию при необходимости, спасибо.

ответ

0

Итак, мой вопрос был в моем service.xml.

В модели я литье тоже (определенно в service.xml) имела только AuditId определен как первичный ключ, но я извлечение данных, который содержит много эти.

Чтобы исправить это, я определил составной ключ AudiId и AudiDetailKey в service.xml, после чего наберите набор данных правильно.

+0

Просто отметим, что service.xml можно найти в сервисном интерфейсе и является ключевым компонентом при разработке сервисов Liferay. – dkanejs

Смежные вопросы