【问题标题】:why Hibernate criteria return empty list if I have data in my table?如果我的表中有数据,为什么休眠条件返回空列表?
【发布时间】:2014-02-03 11:59:51
【问题描述】:

我不明白为什么我从criteria 得到空列表,而我的表中有数据。

获取列表的代码:

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();
}
}

我的报告hibernate.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 中设置为“true”,但我的控制台上没有收到任何 SQL 查询。

【问题讨论】:

  • 检查连接 URL jdbc:oracle:thin:@localhost:1521:xe see here。还要检查日志
  • 这个link 会帮助你
  • 其实我这里有另一个网址jdbc:oracle:thin:@URL:xe,我写8080只是为了我的服务器安全...@Aniket
  • 没有得到任何异常或错误.....只有 O/P 是 List length ======= 0

标签: java hibernate criteria


【解决方案1】:

对于那些仍在寻找这个问题的答案的人,请检查您的休眠配置 xml 并确保在那里声明您的休眠实体

【讨论】:

  • 老问题但是......还有其他可能的原因吗?事实上,我已经将该类包含到配置文件中,但仍然得到一个空列表。
  • 哈哈,我们有时会忘记最重要的声明真的很有趣。我创建了所有映射等,但忘记在配置文件中插入我的实体。非常感谢。
  • 但实际上不应该抛出 Entity not found 异常
【解决方案2】:

在使用 Criteria API 时,我们需要提供表达式或别名,它基本上设置了应该在调用方法/类中实现的 Criteria。

考虑一下,我想为具有 orderId、orderName、orderType 作为其输入属性的 ORDER bean 设置标准,在此基础上我将设置标准或获取数据。我的方法是这样的:

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。但是用于设置订单标准。如果由于任何限制而无法获取整个架构,您可以使用此解决方法。

但是,您可能还需要检查您的数据库连接。这可能是一个不允许您的应用程序获取数据的问题。

【讨论】:

    【解决方案3】:

    请使用这个:

    List list = criteria.list();

    而不是直接使用:

    列表列表=criteria.list();

    我们应该总是提到我们正在为其获取列表的类。例如,如果我想使用 Criteria api 从数据库中获取我的 Student 类的数据,我会使用这样的东西:

    SessionFactory factory= new Configuration().configure().buildSessionFactory(); 
    Session session =factory.openSession(); 
    Criteria criteria=session.createCriteria(Student.class);
    List<Student> list=criteria.list();
     
       for(Student student:list)
        {
            System.out.println("Criteria Demo:"+student.getName()); 
        
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多