我正在尝试从一个方法中执行一个简单的select count语句,该方法适用于我的程序的其他部分但在这里它给了我错误。
public Long validateSub(String source, String tbl){
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Query q = session.createQuery("SELECT count(s) from SlaveSubscribers s where s.SOURCENAME = :sourcename AND s.TBL = :tbl");
q.setParameter("sourcename", source);
q.setParameter("tbl", tbl);
Long result = (Long) q.list().get(0);
session.getTransaction().commit();
return result;
}
错误讯息:
Exception in thread "Thread-3" org.hibernate.QueryException: could not resolve property: SOURCENAME of: com.datadistributor.main.SlaveSubscribers [SELECT count(s) from com.datadistributor.main.SlaveSubscribers s where s.SOURCENAME = :sourcename AND s.TBL = :tbl]
我不知道为什么这不起作用
答案 0 :(得分:10)
只是为了澄清上面的答案,因为我讨厌任何人错过它。
Hibernate在类中使用变量属性作为查询,而不是数据库中的列名。
因此,如果您有这样的模型类:
private Long studentId;
@Id
@GeneratedValue
@Column(name="studentid")
public Long getStudentId()
{
return studentId;
}
您必须对 studentId 而不是 studentid 进行查询。
答案 1 :(得分:5)
您在SlaveSubscribers实体中没有持久属性(字段)SOURCENAME。 SOURCENAME最有可能是数据库列的名称。在HQL中,您需要使用该字段的名称(区分大小写)。