下面是通过我的MyEclipse6生成的数据表对应的类
public class PrivFunc implements java.io.Serializable
{
  private Long id;
  private PrivFunc privFunc;/**这是一个自身关联的表,表中有字段id和pid,pid的值是和id相关联的*/这是我自己的一个bean片断
public class SimpleModel implements java.io.Serializable
{
  private int id;
  private String text;
  private Long haschildren;
  private boolean leaf;
  
  public SimpleModel(int id, String text, Long haschildren)
  {
super();
this.id = id;
this.text = text;
this.haschildren = haschildren;
if(this.haschildren==Long.valueOf(1))
{
this.leaf=true;
}
else
{
this.leaf=false;
}
  }
现在我想通过HQL语句,生成一个含有SimpleModel对象的List,HQL如下
StringBuffer buffer=new StringBuffer();
buffer.append("select new com.family168.action.treeAction.SimpleModel(m.id,m.name,m.haschildren)");
buffer.append(" from (select distinct k.id,k.name,k.haschildren from PrivFunc k where k.id in " +
    "(select t.privFunc.id from PrivFunc t group by t.privFunc.id)) as m");结果运行后,出现的HQL为
select new com.family168.action.treeAction.SimpleModel(m.id,m.name,m.haschildren) from (select distinct k.id,k.name,k.haschildren from com.family168.orm.PrivFunc k where k.id in (select t.privFunc.id from com.family168.orm.PrivFunc t group by t.privFunc.id)) as m报的错误是
org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: ( near line 1, column 88 [select new com.family168.action.treeAction.SimpleModel(m.id,m.name,m.haschildren) from (select distinct k.id,k.name,k.haschildren from com.family168.orm.PrivFunc k where k.id in (select t.privFunc.id from com.family168.orm.PrivFunc t group by t.privFunc.id)) as m]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 88 [select new com.family168.action.treeAction.SimpleModel(m.id,m.name,m.haschildren) from (select distinct k.id,k.name,k.haschildren from com.family168.orm.PrivFunc k where k.id in (select t.privFunc.id from com.family168.orm.PrivFunc t group by t.privFunc.id)) as m]Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 88 [select new com.family168.action.treeAction.SimpleModel(m.id,m.name,m.haschildren) from (select distinct k.id,k.name,k.haschildren from com.family168.orm.PrivFunc k where k.id in (select t.privFunc.id from com.family168.orm.PrivFunc t group by t.privFunc.id)) as m]
是不是自身关联的数据表的HQL这么写不对?

解决方案 »

  1.   

    select new com.family168.action.treeAction.SimpleModel(m.id,m.name,m.haschildren)???
    有这么写的吗?? new  是字段 ? 不能用new
      

  2.   

    有这么写的好像知道哪里错了,hql中from后面不能跟select从句,我把它改为
    buffer.append("select distinct  new com.family168.action.treeAction.SimpleModel(k.id,k.name,k.haschildren)");
    buffer.append(" from PrivFunc k where k.id in " +
    (select t.privFunc.id from PrivFunc t group by t.privFunc.id) ");
    数据就出来了,先不揭帖,大家看看我说的是不是对
      

  3.   

    select ... form (select ...) 不能这样用子查询,建议改为原生态查询
      

  4.   

    查询对象 直接导包不就可以了 new啥啊?
      

  5.   


    hql对象导航
    用对象查询,select * from (select * from t)这样不行的
    你可以用query.createSQLQuery()进行查询
      

  6.   

    sql 的 in 语句后面的集合如果>1000条,会出异常的!