我无法弄清楚为什么这个查询没有给我任何结果。我知道表中存在数据。
执行查询时,列表变量“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
}
答案 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>