简体   繁体   English

Hibernate似乎形成了错误的查询

[英]Hibernate forming the wrong query it seems

My requirement is to extract all the distinct rows(name column alone) where name is not null This is my hibernate code. 我的要求是提取名称不为null的所有不同行(仅名称列),这是我的休眠代码。

DetachedCriteria criteria = DetachedCriteria.forClass(A.class);
criteria.add(Restrictions.isNotNull("name"));
ProjectionList list = Projections.projectionList();
list.add(Projections.distinct(Projections.property("name")),"name");
criteria.setProjection(list);
criteria.setResultTransformer(Transformers.aliasToBean(A.class));
result = getHibernateTemplate().findByCriteria(criteria);

The SQL formed is below: 形成的SQL如下:

select distinct this_.name as y0_ 
from dbo.A this_ 
where y0_ is not null 

The error is ERROR - Invalid column name 'y0_' I dont understand why hibernate is forming the wrong query like this. 错误是ERROR - Invalid column name 'y0_'我不明白为什么休眠会形成这样的错误查询。 Any help appreciated. 任何帮助表示赞赏。

Code for class A: A类代码:

@Entity
@Table(name = "A", uniqueConstraints = {})
public class A implements java.io.Serializable {

    private int skillId;
    private String name;

    public A() {
    }

    @Id
    @Column(name = "SKILL_ID", unique = true, nullable = false, insertable = true, updatable = true)
    @GeneratedValue(strategy = GenerationType.AUTO)
    public int getSkillId() {
        return this.skillId;
    }

    public void setSkillId(int skillId) {
        this.skillId = skillId;
    }

    }

    @Column(name = "name", unique = false, nullable = true, insertable = true, updatable = true, length = 100)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Try this 尝试这个

DetachedCriteria criteria = DetachedCriteria.forClass(A.class);
criteria.add(Restrictions.isNotNull("name"));
ProjectionList list = Projections.projectionList();
list.add(Projections.property("name"));
criteria.setProjection(Projections.distinct(list));

Try out following: 试用以下方法:

Criteria criteria = session.createCriteria(Test.class);
ProjectionList projectionList = Projections.projectionList();
ProjectionList projectionList2 = Projections.projectionList();
projectionList2.add(Projections.distinct(projectionList.add(Projections.property("distinctColumn"), "distinctColumn")));
projectionList2.add(Projections.property("col1"), "col1");
projectionList2.add(Projections.property("col2"), "col2");
criteria.setProjection(projectionList2);
criteria.setResultTransformer(Transformers.aliasToBean(Test.class)); 
List list = criteria.list();

In you case, "distinctColumn" will be "name". 在您的情况下,“ distinctColumn”将为“名称”。

we had the same problem, Creating an alias solved the issue, try: 我们遇到了同样的问题,创建别名解决了该问题,请尝试:

Criteria criteria = session.createCriteria(A.class, "a")
criteria.add(Restrictions.isNotNull("a.name"));
ProjectionList list = Projections.projectionList();
list.add(Projections.distinct(Projections.property("a.name")),"name");
criteria.setProjection(list);
criteria.setResultTransformer(Transformers.aliasToBean(A.class));
result = getHibernateTemplate().findByCriteria(criteria);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM