【问题标题】:Hibernate - Distinct Query returning two columns resultHibernate - 返回两列结果的不同查询
【发布时间】:2014-05-07 11:33:17
【问题描述】:

以前我问过关于如何使用 Hibernate 进行 Distinct 查询的问题。现在我已经过了那个里程碑,我还需要另一件事。也就是说,给定表格,

---------------------------------------
| user_id  |  user_name  | user_type  |
---------------------------------------
|    1     | mark taylor | admin      |
|    2     | bill paxton |co-ordinator|
|    1     | tony brooks | admin      |
|    3     | ali jahan   | developer  |
---------------------------------------

我想创建一个独特的查询,它返回独特的 user_type 及其对应的 user_id。 请注意,特定 user_type 的 user_id 是相同的。比如,

admin = 1
co-ordinator = 2
developer = 3

所以我期待的回报有点像 ArrayList 或包含两个值的排序,如

user_id,user_type

我为获取 Distinct UserType 编写的代码如下,我希望可以对其进行一些修改以获得所需的结果。

public List<String> findDistinctUserName() throws HibernateException {
    List<String> returnVal = new ArrayList<String>();

    Criteria c = this.createCriteria();
    c.setProjection(Projections.distinct(Projections.property("userType")));
    c.addOrder(Order.asc("userType"));

    List<String> userTypeList = c.list();

    for(String userType : userTypeList) {
        if(!userType.equalsIgnoreCase("")) {
            returnVal.add(userType);
        }
    }

    return returnVal;
}

提前感谢您的回答。

【问题讨论】:

  • 感谢@Jay 的回复...但是该值将如何返回?目前我正在做类似 List 的事情,那将如何改变?!?谢谢
  • Hibernate 会返回一个对象数组列表。即,列表。每个数组中的第一个元素是 user_id,第二个元素是 user_type。你得到一个 ClasscastException 因为你期待一个 String 并且休眠返回一个 Object[] 实例。
  • 你能告诉我们给你ClassCastException的代码吗?正如 Priyesh 所说,您将获得 Object[] 的列表,您必须将其解包,然后单独投射每个 Object。在编写代码时使用调试器可能会有所帮助,以检查返回的所有内容的类型。
  • Integer userId = (Integer) userType[0]; String type = (String) userType[1]; System.out.println( "The user id is " + userId + " and the user type is " + type );

标签: java sql hibernate distinct


【解决方案1】:

试试这个:
criteria.setProjection(Projections.distinct(Projections.property("userType")), "userType");

你也不必检查空白字符串,试试这个:

criteria.add(Restrictions.ne("userType",""));

【讨论】:

    猜你喜欢
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多