2016-12-02 3 views
1

Ich verweise Using dynamic query in Liferay und mit MySQL 5.5, aber anstelle von benutzerdefinierten Abfragen mit mehreren Entitäten müssen wir eine gespeicherte Prozedur aufrufen. Wir haben ein Beispielverfahren erstelltWie gespeicherte Prozedur in Liferay aufrufen?

delimiter // 
Create Procedure proc_check (OUT count INT) 
begin 
select count(*) into count from lg_office ; 
end// 

In default.xml, benutzerdefinierte Abfragen enthält, wir

<sql id="de.uhh.l2g.plugins.service.persistence.ProducerFinder.findOfficeCount"> 
     <![CDATA[ 
      Call proc_check(@output) 
     ]]> 
    </sql> 

Im jeweiligen Finder Methode verwendet haben, haben wir den folgenden Code-Schnipsel, die gespeicherte Prozedur aufrufen, Übergeben von -1 für Anfang und Ende.

String sql = CustomSQLUtil.get(FIND_OFFICE_COUNT); 
      SQLQuery q = session.createSQLQuery(sql); 
      QueryPos qPos = QueryPos.getInstance(q); 
      //qPos.add(lectureseriesId); 
      List <Integer> sl = (List<Integer>) QueryUtil.list(q, getDialect(), begin, end); 
      return sl; 

In QueryUtil konnten wir andere anwendbare Methoden nicht finden, um den Anruf auszuführen. Post this wir erhalten die folgenden Fehler

ERROR [RuntimePageImpl-5][JDBCExceptionReporter:82] ResultSet is from UPDATE. No Data. 

Ist dieser Ansatz richtig mit etwas fehlt oder wenn nicht, bitte Ansatz vorschlagen, das gleiche zu erreichen.

+0

Es ist seltsam zu hören, dass Sie Calla gespeicherte Prozedur benötigen, um eine Zählung durchführen zu können. Sind Sie sicher, dass dies der richtige Weg ist? –

+1

@DanieleBaggio Das ist nur für Testzwecke, da das eigentliche nicht funktionierte! –

Antwort

0

Schauen Sie sich das an, versuchen Sie es.

session = openSession(); 
String sql = CustomSQLUtil.get(DELETE_BY_PROJETID); 
SQLQuery query = session.createSQLQuery(sql); 
query.setCacheable(false); 
QueryPos qPos = QueryPos.getInstance(query); 
qPos.add(projectId); 
query.executeUpdate(); 

https://web.liferay.com/it/community/forums/-/message_boards/message/37490823

+0

Ich hatte das ausprobiert aber dann wie bekomme ich die Ausgabe von der gespeicherten proc Ausführung? –

0

es kein Dienstprogramm in liferay-in gebaut ist, um Prozeduraufruf gespeichert, aber Sie können die Verbindung mit DataAccess.getConnection(); nur erhalten und nutzen die JDBC-API wie auf diese Weise

Connection connection =DataAccess.getConnection(); 
CallableStatement cs = connection.prepareCall("{Call proc_check(@output)}"); 
ResultSet rs = cs.executeQuery(); 
Verwandte Themen