2014-02-03 2 views
2

Я не понял, почему я получаю пустой список от criteria, и у меня есть данные в таблице.Почему критерии Hibernate возвращают пустой список, если у меня есть данные в моей таблице?

код, где я получаю список:

hibernateSession_destination = HibernateUtilReports.INSTANCE.getSession(); 

     Criteria criteria = hibernateSession_destination.createCriteria(nr_rec_backup_rule.class); 
     List list = criteria.list(); 
     System.out.println("List length ======= " + list.size()); // prints size = 0 

Мои HibernateUtilReports.java:

public enum HibernateUtilReports { 
    INSTANCE; 
    public static SessionFactory sessionFactory = null; 

private synchronized SessionFactory getSessionFactory(){ 

    if(sessionFactory == null){ 
     Configuration config = new Configuration(); 
     config.addAnnotatedClass(contaque_recording_log.class); 
     config.addAnnotatedClass(contaque_servers.class); 
     config.configure("reportshibernate.cfg.xml"); // is here any error??? 

     Properties configProperties = config.getProperties(); 
     ServiceRegistryBuilder serviceRegisteryBuilder = new ServiceRegistryBuilder(); 
     ServiceRegistry serviceRegistry = serviceRegisteryBuilder.applySettings(configProperties).buildServiceRegistry(); 
     sessionFactory = config.buildSessionFactory(serviceRegistry); 
    } 
    return sessionFactory; 
} 

public Session getSession(){ 
    return getSessionFactory().openSession(); 
} 
} 

Мой reportshibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
     <property name="connection.url">jdbc:oracle:thin:@8080/xe</property> 
     <property name="hibernate.connection.username">user</property> 
     <property name="hibernate.connection.password">1234</property> 

     <property name="c3p0.minPoolSize">2</property> 
    <property name="c3p0.maxPoolSize">100</property> 
    <property name="c3p0.timeout">1000</property> 
    <property name="hibernate.cache.use_second_level_cache">false</property> 
    <property name="show_sql">true</property> 
    <property name="hibernate.connection.zeroDateTimeBehavior">convertToNull</property> 

</session-factory> 

Где я ошибаюсь? ??

Отредактировано:

Примечание: Так как «show_sql» установлено значение «истина» в моем XML, но я не получаю SQL запрос на моей консоли.

+0

Проверьте соединение URL 'JDBC: оракул: тонкий: @localhost : 1521: xe' [см. Здесь] (http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html). Также проверьте журнал –

+0

это [ссылка] (http://www.mkyong.com/hibernate/hibernate-criteria-examples/) поможет вам –

+0

Фактически у меня есть еще один URL здесь 'jdbc: oracle: thin: @URL: xe' , Я написал '8080' только здесь для обеспечения безопасности моего сервера ... @ Aniket –

ответ

15

Для тех, кто все еще ищет ответ на этот вопрос, как я, пожалуйста, проверьте вашу спящий режим конфигурации XML и убедитесь, что спящий субъект там объявлен

+0

Это действительно помогло! Благодаря!!! – allkenang

+0

Старый вопрос, но ... есть ли другая причина? Я фактически включил класс в файл конфигурации, но все равно получаю пустой список. – jaivalis

+0

ха-ха, это действительно смешно, как мы иногда забываем самое важное заявление. Я создал все сопоставления и т. Д., Но забыл вставить мой объект в файл конфигурации. Большое спасибо. –

0

При работе с API критериев нам необходимо предоставить выражение или псевдоним, который в основном устанавливает критерии, которые должны быть реализованы в вызывающем методе/классе.

Учтите, что я хочу установить критерии для компонента ORDER, который имеет orderId, orderName, orderType в качестве его входных атрибутов, на основе которых я задам критерии или извлечу данные. Мой подход будет что-то вроде этого:

hibernateSession_destination = HibernateUtilReports.INSTANCE.getSession(); 
Criteria criteria = hibernateSession_destination.createCriteria(Order.class); 
criteria.add(Expression.eq("orderId", orderId)); //1 
criteria.add(Expression.like("orderType", siteType)); //2 
criteria.add(Expression.in("orderId", siteId)); //3 
List list = criteria.list(); 
System.out.println("List length ======= " + list.size()); 

Примечание: Это не нужно для меня, чтобы включить все 1,2,3 отмеченные выше. Но для установки критериев заказа. Вы можете использовать это как обход, если вы не можете получить всю схему из-за каких-либо ограничений.

Однако, возможно, вам также потребуется проверить подключение к db. Это может быть проблемой, которая не позволяет вашему приложению получать данные.

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