2016-12-02 3 views
1

Я имею в виду Using dynamic query in Liferay и используя MySQL 5.5, но вместо пользовательских запросов, связанных с несколькими сущностями, нам нужно вызвать хранимую процедуру. Мы создали процедуруКак вызвать хранимую процедуру в liferay?

образца
delimiter // 
Create Procedure proc_check (OUT count INT) 
begin 
select count(*) into count from lg_office ; 
end// 

В DEFAULT.XML, содержащий пользовательские запросы, мы использовали

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

В соответствующем методе Finder, мы использовали ниже фрагмент коду для вызова хранимой процедуры, передавая -1 для начала и конца.

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; 

В QueryUtil мы не смогли найти другие применимые методы для выполнения вызова. сообщение это мы получаем ошибку ниже

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

Является ли это правильный подход с чем-то отсутствует или если нет, пожалуйста, предложить подход для достижения того же.

+0

Странно слышать, что вам нужна хранимая процедура каллы, чтобы выполнить операцию подсчета. Вы уверены, что это правильный путь? –

+1

@ DanieleBaggio Это только для целей тестирования, поскольку фактический не работал! –

ответ

0

Посмотрите на это, попробуйте.

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

Я пробовал это, но потом, как я получаю результат от сохраненного выполнения proc? –

0

нет никакой полезности встроенной в Liferay для вызова хранимой процедуры, но вы можете просто получить соединение с DataAccess.getConnection(); и использовать JDBC API, как таким образом

Connection connection =DataAccess.getConnection(); 
CallableStatement cs = connection.prepareCall("{Call proc_check(@output)}"); 
ResultSet rs = cs.executeQuery(); 
Смежные вопросы