【问题标题】:JPQL Query gives exception when trying to add condition after order byJPQL 查询在 order by 后尝试添加条件时出现异常
【发布时间】:2017-07-28 20:06:26
【问题描述】:

我正在尝试在 JPQL 中执行 MySql 查询。
这是我的 MySql 查询

select * from test.employee order by DEG != 'm2',DEG;   

其中test 是模式名,employee 是表名,DEG 包含字符串。 我在 JPQL 中写了这个并得到了异常。

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("DBConnectionPU");
EntityManager em = emFactory.createEntityManager();
Query q = em.createQuery("SELECT em FROM Employee em ORDER BY em.deg != 'm2', em.deg");
List<Employee> list = q.getResultList();   

例外:

Exception Description: Syntax error parsing [SELECT em FROM Employee em ORDER BY em.deg != 'm2', em.deg]. 

[36, 50] The order by item is not a valid expression.
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1605)
        at dbconnection.DBConnection.main(DBConnection.java:39)
    Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JPQLException
    Exception Description: Syntax error parsing [SELECT em FROM Employee em ORDER BY em.deg != 'm2', em.deg]. 
    [36, 50] The order by item is not a valid expression.
        at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:155)
        at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:334)
        at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:278)
        at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:163)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:142)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:116)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:102)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:86)
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1603)
        ... 1 more   

我使用条件查询进行了尝试,它工作正常。直接 JPQL 查询有什么问题?我错过了什么吗?

【问题讨论】:

    标签: java mysql jpql


    【解决方案1】:

    尝试将em.deg != 'm2' 更改为case when

    SELECT em 
    FROM Employee em 
    ORDER BY CASE WHEN em.deg != 'm2' THEN 1 ELSE 0 END, em.deg
    

    【讨论】:

    • 谢谢!有用 !!有什么背后的原因吗?
    • @FahimFerojeAlJami Emm,对不起,我曾经遇到过这个问题,case when 帮我解决它,而不是研究它的原因。
    猜你喜欢
    • 2015-08-11
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多