2016-02-02 6 views
0

Я новичок в Hibernate и Spring. Я хочу получить данные из запроса HQL, сделанные HibernateTemplate.find(). Этот запрос имеет оператор and.как использовать HibernateTemplate.find() для оператора и оператора

Когда я ссылаюсь на List с HibernateTemplate.find(), размер списка равен 0. Ниже мой код.

public long getMetaDataID(String customerID,String objectID){ 
     long metadataID=0; 
     long customerID_l=Long.parseLong(customerID); 
     long objectID_l=Long.parseLong(objectID); 
     List<RWFieldMetadata> list =template.find("from RWFieldMetadata p where p.customer_id = ? and p.object_id=?", customerID_l,objectID_l); 
     for(RWFieldMetadata obj: list){ 
      metadataID=obj.getId(); 
     } 
     return metadataID; 
    } 

Я знаю, что есть и criteria. Но мне сложно и нужно продолжать использовать HibernateTemplate.find(). Почему я получаю размер списка как 0. Какую ошибку я совершаю здесь.

+0

Вы проверили параметр? – Jens

+0

Да, они идут. Но все же размер списка 0 – JPG

+1

Добавьте свой класс 'RWFieldMetadata'. –

ответ

-1

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

Вам необходимо добавить транзакцию в метод getMetaDataID(). Вы можете сделать это с аннотацией @Transactional, но вам нужно получить свой класс из весеннего контекста.

Вы также можете открыть транзакцию, используя , но вам необходимо правильно ее контролировать.

+0

Нет, нет, для чтения вам не нужна транзакция. Рядом с этим шаблон фактически использует локальный tx, когда нет tx. –

+0

@ M.Deinum Пожалуйста, покажите, где в источнике создана транзакция [HibernateTemplate # doExecute()] (http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-orm/ 4.2.0.RELEASE/орг/springframework/ОРМ/hibernate4/HibernateTemplate.java # HibernateTemplate.doExecute% 28org.springframework.orm.hibernate4.HibernateCallback% 2Cboolean% 29). Для чтения данных транзакция действительно нужна [http://stackoverflow.com/a/3713847/3405171]. –

+0

@ M.Deinum И где взять локальный tx в консольном приложении, например? –

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