日期:2014-05-20  浏览次数:20776 次

hibernate关联表查询报错org.springframework.orm.hibernate3.HibernateQuery illegal syntax near collection: id
数据访问层的代码还简单就是两张表的关联查询:

public OrganNode[] getOrganNodesByUserId(long userId) {
		
	String Hql="select u.organNodes from User u where u.id=? and u.removed=0";
List result = findByHQL(hql, new Long(userId));
return (OrganNode[]) result.toArray(new OrganNode[result.size()]);

	}

table user
table user_oragnnode(user_id,organnode_id)//关联表
table organnode

注:u.organNodes为实体User类中的一个set集合属性

我的目标是通过user_id获得organnode的集合数组。

前台访问后后台报了以下错误:
org.springframework.orm.hibernate3.HibernateQueryException: 
illegal syntax near collection: id [select user.organNodes from com.wondersgroup.framework.security.bo.SecurityUser user where user.id=?  and user.removed = 0]; 
nested exception is org.hibernate.QueryException:
illegal syntax near collection: id [select user.organNodes from com.wondersgroup.framework.security.bo.SecurityUser user where user.id=?  and user.removed = 0]

看了网上很多中造成的原因但都没能解决我的问题,最后在细微之处发现了个恶心的问题

修改application-hibernate.xml配置文件 原文件:

<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
 
修改后:
<propkey="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>
造成的原因就是hibernate查询选择器版本过低才使JAR包里的类没有加载到,在网上看还没有这种解决方式,现在解决了贴给大家分享少走些弯路。