java - 通过 Hibernate 从 SQL 数据库中获取随机对象

标签 java sql mysql hibernate hql

我有以下 MySql 相关代码 (ORDER BY RAND())。我想知道是否有 hibernate HQL 替代品(admin 是 boolean 标记,表示用户是管理员)。这是工作代码:

public long getRandomAdmin() {
    Session session = getSession();
    Query selectQuery = session.createSQLQuery("SELECT user_id FROM users WHERE admin = '1' ORDER BY RAND()");
    selectQuery.setMaxResults(1);

    List<BigInteger> list = null;
    try {
        list = selectQuery.list();
    } catch (HibernateException e) {
        log.error(e);
        throw SessionFactoryUtils.convertHibernateAccessException(e);
    }

    if (list.size() != 1) {
        log.debug("getRandomAdmin didn't find any user");
        return 0;
    }
    log.debug("found: " + list.get(0));

    return list.get(0).longValue();
}

最佳答案

请参阅此链接: http://www.shredzone.de/cilla/page/53/how-to-fetch-a-random-entry-with-hibernate.html

Criterion restriction = yourRestrictions;
Object result = null;  // will later contain a random entity
Criteria crit = session.createCriteria(Picture.class);
crit.add(restriction);
crit.setProjection(Projections.rowCount());
int count = ((Number) crit.uniqueResult()).intValue();
if (0 != count) {
  int index = new Random().nextInt(count);
  crit = session.createCriteria(Picture.class);
  crit.add(restriction);
  result = crit.setFirstResult(index).setMaxResults(1).uniqueResult();
}

这就是你想要的。保持 Hibernate 作为抽象层,同时仍然能够查询随机对象。不过,性能会受到一些影响。

虽然我一直在使用Hibernate,但我不知道更优雅、更易于使用的方式。恕我直言,您应该将该方法包装在外观后面。

关于java - 通过 Hibernate 从 SQL 数据库中获取随机对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232934/

相关文章:

java - 警告 org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Bootstrap 代理 127.0.0.1 :9092 (id: -1 rack: null) disconnected

mysql - 在不停机的情况下迁移巨大的生产数据库

mysql - 有没有一种聪明的方法可以在 MySQL 中批量更新?

php - Codeigniter - 路由访问模型和数据库

php-从 php 插入后未触发 MySQL 触发器

java - 获取 hadoop ChecksumException : Checksum error

java - libgdx : some questions for beginner

java - 泛型无法转换错误java

sql - 来自重叠间隔的 Oracle 时间线报告

mysql - 有没有一种快速的方法来更新 SQL 中的许多记录?