use*_*286 4 java jpa named-query jpql
这是我的JPA ENTITY
@Entity
@NamedQueries({
@NamedQuery(name = "Question.randQuestion", query = "SELECT q FROM Question AS q ORDER BY RANDOM")
})
@Table(name = "questions")
public class Question implements Serializable {
.....
}
Run Code Online (Sandbox Code Playgroud)
问题是:
eclipse给了我这个namedQuery的错误.它说:"在FROM子句中没有定义标识变量'RANDOM'"
我也试过RAND()而不是RANDOM和NEWID().
谢谢.
要获得随机行,首先获得总问题列表并获取任何一个.
public Question getRandomQuestion(EntityManager em) {
Query countQuery = em.createNativeQuery("select count(*) from Question");
long count = (Long)countQuery.getSingleResult();
Random random = new Random();
int number = random.nextInt((int)count);
Query selectQuery = em.createQuery("select q from Question q");
selectQuery.setFirstResult(number);
selectQuery.setMaxResults(1);
return (Question)selectQuery.getSingleResult();
}
Run Code Online (Sandbox Code Playgroud)
注意:您可能需要实现一个逻辑,以避免在多次调用方法时出现重复.
Ale*_* K. -1
据我了解,您想从表中选择随机问题。您宁愿使用 WHERE 子句,并从代码中提供一些参数,例如:
SELECT q FROM Question AS q WHERE id = :id
Run Code Online (Sandbox Code Playgroud)
然后在创建查询的代码中,您必须生成要选择的随机 ID:
query.setParam("id", getRandomId());
Run Code Online (Sandbox Code Playgroud)
为了获得随机 id,您可能需要从数据库查询行数并使用java.util.Random.nextInt(rowsCount)(当然,如果所有 id 都在那里)。
顺便说一句,这里描述了类似的内容:http ://www.shredzone.de/cilla/page/53/how-to-fetch-a-random-entry-with-hibernate.html
| 归档时间: |
|
| 查看次数: |
9403 次 |
| 最近记录: |