自连接表上的Hibernate查询失败 [英] Hibernate Query on self join table fails
本文介绍了自连接表上的Hibernate查询失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
键号(10)NOT NULL,
parentkey number (10)NOT NULL,
name varchar(20),
代表它的类。
@Entity
@Table(name =example)
public class Example
{
@Id
@Column(name =KEY)
专用长键;
@Column(name =NAME)
私人字符串名称;
@ManyToOne
@JoinColumn(name =parentkey,referencedColumnName =key)
private示例父;
示例()
{
parent = this;
}
当我尝试查询实例及其父项时,我得到
org.hibernate.QueryException:无法解析属性:parent.name:com.Example
以下是我如何构建Criteria查询:
示例dsd = ... ;
...
Criteria crit = session.createCriteria(Example.class);
crit.add(Restrictions.eq(name,dsd.getName()));
crit.add(Restrictions.eq(parent.name,dsd.getParent()。getName()));
return crit.list();
我可以在raw sql中执行此操作,但我宁愿不要。我做错了什么?
解决方案
您可以创建一个 alias :
Criteria crit = session.createCriteria(Example.class);
crit.add(Restrictions.eq(name,dsd.getName()));
crit.createAlias(父母,父母);
crit.add(Restrictions.eq(parent.name,dsd.getParent()。getName()));
I have table that can represent a tree.
key number(10) NOT NULL,
parentkey number(10) NOT NULL,
name varchar(20),
And a class representing it.
@Entity
@Table(name = "example")
public class Example
{
@Id
@Column(name = "KEY")
private long key;
@Column(name = "NAME")
private String name;
@ManyToOne
@JoinColumn(name="parentkey",referencedColumnName="key")
private Example parent;
public Example()
{
parent = this;
}
When I try to query on an instance and its parent I get
org.hibernate.QueryException: could not resolve property: parent.name of: com.Example
Here is how I build the Criteria query:
Example dsd = ...;
...
Criteria crit = session.createCriteria(Example.class);
crit.add(Restrictions.eq("name", dsd.getName()));
crit.add(Restrictions.eq("parent.name", dsd.getParent().getName()));
return crit.list();
I could do this in raw sql, but I would rather not. What am I doing wrong?
解决方案
You can create an alias:
Criteria crit = session.createCriteria(Example.class);
crit.add(Restrictions.eq("name", dsd.getName()));
crit.createAlias("parent", "parent");
crit.add(Restrictions.eq("parent.name", dsd.getParent().getName()));
这篇关于自连接表上的Hibernate查询失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文