首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未找到查询中的java hibernate别名

未找到查询中的java hibernate别名
EN

Stack Overflow用户
提问于 2016-12-12 04:49:24
回答 2查看 457关注 0票数 0

我在我的dao中有这个查询

代码语言:javascript
复制
    Query q = entityManager.createQuery("SELECT geoCity,(CASE WHEN geoCity.name LIKE :search1 THEN 0 ELSE 1 END) as myOrder FROM GeoCity geoCity    WHERE (LOWER(geoCity.name) LIKE :search ) ORDER BY geoCity.myOrder ,geoCity.name");

这是实体

代码语言:javascript
复制
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;

/**
 * GeoCity generated by hbm2java
 */
@Entity
@Table(name="geo_city" ,schema="public")
public class GeoCity  implements java.io.Serializable {
    .....

     public transient Integer myOrder;

    public GeoCity() {
    }

    public GeoCity(String istat) {
        this.istat = istat;
    }


    @Transient
    public Integer getMyOrder() {
        return myOrder;
    }

    public void setMyOrder(Integer myOrder) {
        this.myOrder = myOrder;
    }
}

geoRegion.myOrder无效。但我需要在查询中使用case,以便以特定的方式进行排序。有什么办法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-12-12 12:56:43

这是因为您的声明是transient

代码语言:javascript
复制
public transient Integer myOrder; // this is transient

尝试删除transient

代码语言:javascript
复制
public Integer myOrder;

并删除方法中的注释@Transient

瞬态意味着,你声明的变量是而不是 serializable,这就是为什么它在hibernate中是一个无效的输入。单击此链接可查看中的更多信息。

票数 0
EN

Stack Overflow用户

发布于 2016-12-14 23:44:52

我发布了使用原生查询的替代解决方案

代码语言:javascript
复制
public ArrayList<Autocomplete> autocomplete(String search, HttpSession httpSession, HttpServletRequest request) {
    ArrayList<Autocomplete> autocomplete = new ArrayList<>();
    try{
        Query q = entityManager.createNativeQuery("SELECT istat,name,CASE WHEN LOWER(g.name) LIKE :search1 THEN 0 ELSE 1 END as myOrder FROM geo_city g WHERE (LOWER(g.name) LIKE :search ) ORDER BY myOrder, g.name");
        q.setParameter("search","%" + search.toLowerCase()  + "%");
        q.setParameter("search1",search.toLowerCase()  + "%");
        List<Object[]> city = q.getResultList();
        if(city!=null && city.size()>0){
            for(Object[] o: city) {
                autocomplete.add(new Autocomplete(o[0].toString(), o[1].toString()));
            }
        }else{
            autocomplete.add(new Autocomplete("","Nessun risultato!"));
        }
    }catch(Exception e){
        e.printStackTrace();
    }

    return autocomplete;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41091012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档