【问题标题】:methode JEE implementation方法JEE实现
【发布时间】:2016-08-18 14:11:37
【问题描述】:

我实现了一种允许我自动生成测试(整个问题)的方法,但问题是: 该方法显然会采用随机问题的数量,但也会采用生成的问题类别(我有一个 entié 类别,因此也有一个表)我不知道我会将类别放在哪里进行查询。 其次,JPQL 不采用 RANDOM() 我该怎么办?

schema of the DataBase

public List<Question> prepareRandomTest(int number_of_questions, Categorie      categorie){ 
      String jpql = "SELECT q FROM Question q ORDER BY RANDOM() LIMIT "+number_of_questions  ;
     Query query = entityManager.createQuery(jpql);
      return query.getResultList();
    }

【问题讨论】:

  • entityManager.persist(Question.class);?!
  • @CássioMazzochiMolin 我纠正它

标签: jpa


【解决方案1】:

您正在尝试使用 Java Persistence Query Language here,因此您的解决方案没有考虑 RANDOM。使用本机查询并从本机 sql 字符串构建查询,本机查询只是一个没有实体对象引用的普通 sql 语句(如 Question)。这样一个普通的 sql 关键字,如 RANDOM 等很容易阅读。

Native Query Tutorial

而不是使用

String jpql = "SELECT q FROM Question q ORDER BY RANDOM() LIMIT "+number_of_questions  ;

使用:

"SELECT * FROM question where category="+category+" ORDER BY RANDOM() LIMIT "+number_of_questions;

其他建议: 从代码中的“枚举”中获取类别字符串以匹配数据库类别列中的字符串值。

【讨论】:

  • 在我的程序中我使用 JPQL,所以如果我使用简单的 SQL 查询就不会造成问题?
  • 无论你使用的是 JPQL 还是 Sql Query String,hibernate 都会自行协商创建这样的查询对象(Query query = entityManager.createQuery(jpql or sql);),所以你没有担心原生查询会破坏您的代码,这是 hibernate 提供的强制性抽象。
  • 正确吗? public List prepareRandomTest(int number_of_questions, Categorie categorie){ String sql = "SELECT * FROM question where category="+categorie+" ORDER BY RANDOM() LIMIT "+number_of_questions; SQLQuery 查询 = session.createSQLQuery(sql);列表 结果 = (列表)query.list();返回结果; }
  • “返回结果”而不是返回结果。
  • SQLQuery 查询 = session.createSQLQuery(sql); sqlQuery 无法解析为类型和会话也可以帮助我
猜你喜欢
  • 1970-01-01
  • 2016-01-23
  • 2014-09-07
  • 2022-01-16
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多