下面是通过我的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这么写不对?
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这么写不对?
有这么写的吗?? new 是字段 ? 不能用new
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) ");
数据就出来了,先不揭帖,大家看看我说的是不是对
hql对象导航
用对象查询,select * from (select * from t)这样不行的
你可以用query.createSQLQuery()进行查询