自连接表上的Hibernate查询失败 [英] Hibernate Query on self join table fails

查看:102
本文介绍了自连接表上的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆