【问题标题】:Hibernate Query on self join table fails自联接表上的休眠查询失败
【发布时间】:2015-07-17 15:46:38
【问题描述】:

我有可以代表一棵树的表格。

key       number(10) NOT NULL,
parentkey number(10) NOT NULL,
name      varchar(20),

还有一个代表它的类。

@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;
    }

当我尝试查询一个实例及其父对象时,我得到了

org.hibernate.QueryException: 无法解析属性: parent.name of: com.Example

这是我构建 Criteria 查询的方式:

        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();

我可以在原始 sql 中执行此操作,但我不想这样做。我做错了什么?

【问题讨论】:

    标签: sql hibernate orm


    【解决方案1】:

    你可以创建一个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()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多