4

我不明白为什么这个查询没有给我任何结果。我知道数据存在于表中。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

4 回答 4

2

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

于 2014-09-24T16:28:36.600 回答
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>
于 2016-07-21T04:32:28.553 回答
0

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

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

于 2013-11-14T21:45:55.847 回答
0

添加到@nikita;s 答案,请检查 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>
于 2017-01-04T11:47:43.563 回答