Java Query和Enum

时间:2011-07-29 13:20:01

标签: java jpa random enums

我从查询中获取结果列表时遇到问题。查询返回一个null对象。我不知道它为什么会发生。但是如果我评论它的WHERE语句它的工作正常,但我有两个可以指定结果的枚举。我认为我第一次使用它,谷歌没有给出任何答案,除了使用NamedQuery。这是我的代码:

@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public DeviceProfileAttribute getRandomDeviceProfileAttribute(Category category, Platform platform) {

    Query q = em.createQuery("SELECT d FROM DeviceProfileAttribute d " +
            "WHERE d.tenantAttribute.attribute.category=:category AND " +
            "d.tenantAttribute.attribute.platform=:platform " +
            "ORDER BY RAND()");
    q.setParameter("category", category);
    q.setParameter("platform", platform);
    q.setMaxResults(1);
    if (q.getResultList().isEmpty()) {
        return null;
    } else {
        return (DeviceProfileAttribute) q.getResultList().get(0);
    }

}

我确定null不仅仅是一个答案。

提前致谢。

P.S可能有人在放入所有参数后检查此查询吗?

P.P.S问题在于在一个SQL查询中使用Enum和ORDER by RAND()。

1 个答案:

答案 0 :(得分:0)

对我来说唯一的出路就是使用这样的代码:

@Transactional(readOnly = true, propagation = Propagation.REQUIRED)

public DeviceProfileAttribute getRandomDeviceProfileAttribute(Category category, Platform platform) {

Query q = em.createQuery(
        "SELECT d FROM DeviceProfileAttribute d " +
        "WHERE d.tenantAttribute.attribute.category=:category AND " +
        "d.tenantAttribute.attribute.platform=:platform "
);
q.setParameter("category", category);
q.setParameter("platform", platform);
if (q.getResultList().isEmpty()) {
    return null;
} else {
    return (DeviceProfileAttribute) q.getResultList().get( new Random().nextInt(q.getResultList().size()));;
}

}