Sql JPQL查询:不敏感地按大小写使用订单

Sql JPQL查询:不敏感地按大小写使用订单,sql,jakarta-ee,jpa,jpql,openjpa,Sql,Jakarta Ee,Jpa,Jpql,Openjpa,使用线程(这非常有用),因此我对may jpql查询也做了同样的操作(非常简单,只需选择所有记录,但需要按“名称”字段排序): 我正在使用openjpa,不幸的是应用程序给了我 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.myname.app.UserGroup 运行整个jpql的代码如下所示: public static List<UserGroup> findAllUserGr

使用线程(这非常有用),因此我对may jpql查询也做了同样的操作(非常简单,只需选择所有记录,但需要按“名称”字段排序):

我正在使用openjpa,不幸的是应用程序给了我

 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.myname.app.UserGroup
运行整个jpql的代码如下所示:

public static List<UserGroup> findAllUserGroups(){
    return entityManager().createQuery("SELECT o, LOWER(o.name) AS nameInOrder FROM UserGroup o ORDER BY nameInOrder ASC", UserGroup.class).getResultList();
}
公共静态列表findAllUserGroups(){
返回entityManager();
}
我猜,似乎整个管理者都把
o
作为一个对象,而把
LOWER(o.name)
作为另一个对象


请帮助,确实看不到任何问题,但OpenJPA(v2.2)不起作用。

根据您链接到的线程,此查询的返回类型是
List
,而不是
List

一种方法是保持查询不变,并通过循环将
用户组从列表中拉出:

List<Object[]> results = entityManager().createQuery("SELECT o, LOWER(o.name) AS nameInOrder FROM UserGroup o ORDER BY nameInOrder ASC", UserGroup.class).getResultList();
List<UserGroup> userGroups = new ArrayList<UserGroup>();
for(Object[] result : results) {
    userGroups.add( result[0] );
}
return userGroups;
List results=entityManager().createQuery(“从UserGroup o ORDER BY nameInOrder ASC中选择o,LOWER(o.name)作为nameInOrder”,UserGroup.class。)getResultList();
List userGroups=new ArrayList();
对于(对象[]结果:结果){
添加(结果[0]);
}
返回用户组;

根据链接到的线程,此查询的返回类型为
List
,而不是
List

一种方法是保持查询不变,并通过循环将
用户组从列表中拉出:

List<Object[]> results = entityManager().createQuery("SELECT o, LOWER(o.name) AS nameInOrder FROM UserGroup o ORDER BY nameInOrder ASC", UserGroup.class).getResultList();
List<UserGroup> userGroups = new ArrayList<UserGroup>();
for(Object[] result : results) {
    userGroups.add( result[0] );
}
return userGroups;
List results=entityManager().createQuery(“从UserGroup o ORDER BY nameInOrder ASC中选择o,LOWER(o.name)作为nameInOrder”,UserGroup.class。)getResultList();
List userGroups=new ArrayList();
对于(对象[]结果:结果){
添加(结果[0]);
}
返回用户组;

为了记录在案,下面是我根据jonc的建议实现的

// find all groups in order
public static List<UserGroup> findAllUserGroups(){
    List<Object> results = entityManager().createQuery("SELECT o, LOWER(o.name) AS nameInOrder FROM UserGroup o ORDER BY nameInOrder ASC", Object.class).getResultList();
    List<UserGroup> userGroups = new ArrayList<UserGroup>();
    for(Object result : results) {
        Object[] resultArray = (Object[])result;
        userGroups.add((UserGroup)resultArray[0]);
    }
    return userGroups;
}

为了记录在案,下面是我按照jonc的建议实现的

// find all groups in order
public static List<UserGroup> findAllUserGroups(){
    List<Object> results = entityManager().createQuery("SELECT o, LOWER(o.name) AS nameInOrder FROM UserGroup o ORDER BY nameInOrder ASC", Object.class).getResultList();
    List<UserGroup> userGroups = new ArrayList<UserGroup>();
    for(Object result : results) {
        Object[] resultArray = (Object[])result;
        userGroups.add((UserGroup)resultArray[0]);
    }
    return userGroups;
}

这是一个很好的发现!我太沮丧了,没有在那个帖子上完成全部答案:)这是一个很好的发现!我太沮丧了,没能在那个帖子上完整回答:)