日期:2014-05-20 浏览次数:20776 次
数据访问层的代码还简单就是两张表的关联查询:
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包里的类没有加载到,在网上看还没有这种解决方式,现在解决了贴给大家分享少走些弯路。