Hibernate标准返回空列表但存在数据。使用注释

时间:2013-11-14 17:24:35

标签: java database hibernate annotations

我无法弄清楚为什么这个查询没有给我任何结果。我知道表中存在数据。 执行查询时,列表变量“results”为空。我正确实现了复合键吗?

我甚至尝试使用@EmbeddedId来完成此操作,但返回的列表仍为空。

        Session sess = HibernateUtil.getSession();
        Criteria criteria = sess.createCriteria(Employee.class);
        criteria.add(Restrictions.eq("employeeId", 255847208));
        criteria.add(Restrictions.eq("serialId", 461));
        List<Employee> results = criteria.list();

主要密钥类

public class EmpPrmryKey implements Serializable {
        private Integer employeeId;
        private Integer serialId;
        //getters and setters
}

POJO映射到表格:

@Entity
@IdClass(EmpPrmryKey.class)
@Table(name = "EMPLOYEE")
public class Employee{

    private EmpPrmryKey compositeId;

    @Id
    @Column(name = "employee_id")
    private Integer employeeId; 

    @Id
    @Column(name = "serial_id")
    private Integer serialId;

    //getters and setters
}

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我刚遇到几乎相同的问题而我的问题是在applicationContext.xml中我为扫描sessionFactory指定了错误的包名称。有趣的是,Eclipse没有向我显示任何异常,错误,因此调试它非常困难:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="{{Wrong Package Name}}" />
</bean>

答案 2 :(得分:0)

首先,我猜你在Employee类中不需要private EmpPrmryKey compositeId;

我使用相同的实体和您提供的相同查询创建了本地项目(它返回了预期结果)。因此,如果结果仍为空,那么您可以检查您是否正在查找正确的表或数据库。

答案 3 :(得分:0)

添加到@nikita;的答案,请在sessionFactory bean id(applicationContext.xml)中检查名称为annotatedClasses的属性。 Tt会是这样的:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="annotatedClasses">
    <list>
      <value>com.your.package.Employee</value>
    </list>
  </property>
</bean>