Java 如何获取Hibernate返回的值?
我被卡住了,我用hibernate运行这个查询,但不知道如何获取查询返回的值 查询:Java 如何获取Hibernate返回的值?,java,mysql,hibernate,Java,Mysql,Hibernate,我被卡住了,我用hibernate运行这个查询,但不知道如何获取查询返回的值 查询: select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3; public Set<Magistrado> get3Magistrado() { ConnectionDataBase c
select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3;
public Set<Magistrado> get3Magistrado() {
ConnectionDataBase cdb = new ConnectionDataBase();
Set<Magistrado> magistrados = null;
try {
Query createQuery = cdb.getSession().createQuery("select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3");
// Here, HELP!
if (magistrados == null) {
return null;
}
}
catch (HibernateException he) {
cdb.catchException(he);
}
finally {
cdb.closeSession();
}
return magistrados;
}
public class Subject implements java.io.Serializable {
private Integer id;
private String subName;
private String day;
private String time;
private Set<Student> students = new HashSet<>();
...
public class Student implements java.io.Serializable {
private Integer id;
private String FName;
private String LName;
private int age;
private Set subjects = new HashSet();
...
Query q = s.createQuery("FROM com.hibernate.entities.Subject sub JOIN sub.students s WHERE s.id= :stu_id")
.setInteger("stu_id", 1);
List<String> subj = q.list();
for (String ss : subj) {
System.out.println(ss);
}
DAO:
select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3;
public Set<Magistrado> get3Magistrado() {
ConnectionDataBase cdb = new ConnectionDataBase();
Set<Magistrado> magistrados = null;
try {
Query createQuery = cdb.getSession().createQuery("select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3");
// Here, HELP!
if (magistrados == null) {
return null;
}
}
catch (HibernateException he) {
cdb.catchException(he);
}
finally {
cdb.closeSession();
}
return magistrados;
}
public class Subject implements java.io.Serializable {
private Integer id;
private String subName;
private String day;
private String time;
private Set<Student> students = new HashSet<>();
...
public class Student implements java.io.Serializable {
private Integer id;
private String FName;
private String LName;
private int age;
private Set subjects = new HashSet();
...
Query q = s.createQuery("FROM com.hibernate.entities.Subject sub JOIN sub.students s WHERE s.id= :stu_id")
.setInteger("stu_id", 1);
List<String> subj = q.list();
for (String ss : subj) {
System.out.println(ss);
}
查询对象没有方法让我知道idMagistrado和numeroDemandas的值。我不知道该怎么办,帮助。HQL是一种面向对象的查询语言,类似于SQL,但HQL不操作表和列,而是使用持久对象及其属性 假设我们有一个如下所示的数据库表结构: 然后可以给出每个表的实体类(Hibernate将Java类映射到数据库表): 主题
public class Subject implements java.io.Serializable {
private Integer id;
private String subName;
private String day;
private String time;
private Set subjectHasStuDetailses = new HashSet();
public Subject() {
}
//getters and setters
...
学习细节
public class StuDetails implements java.io.Serializable {
private Integer id;
private String FName;
private String LName;
private String sex;
private String dob;
private Set subjectHasStuDetailses = new HashSet();
public StuDetails() {
}
//getters and setters
...
public class SubjectHasStuDetails implements java.io.Serializable {
private Integer id;
private StuDetails stuDetails;
private Subject subject;
public SubjectHasStuDetails() {
}
//getters and setters
...
主题的详细信息
public class StuDetails implements java.io.Serializable {
private Integer id;
private String FName;
private String LName;
private String sex;
private String dob;
private Set subjectHasStuDetailses = new HashSet();
public StuDetails() {
}
//getters and setters
...
public class SubjectHasStuDetails implements java.io.Serializable {
private Integer id;
private StuDetails stuDetails;
private Subject subject;
public SubjectHasStuDetails() {
}
//getters and setters
...
在每个实体类中,我们都可以根据需要重写默认构造函数
假设我们的实体类位于名为com.hibernate.entities的包中。如果我们需要让选定的学生完成所有科目,那么我们的Hql查询可以是:
Query query = ss.createQuery("FROM com.hibernate.entities.SubjectHasStuDetails shs WHERE "
+ "shs.stuDetails.id= :s_id").
setInteger("s_id", 32);
List<com.hibernate.entities.SubjectHasStuDetails> shs = query.list();
for (SubjectHasStuDetails sh : shs) {
sh.getSubject().getSubName();
}
更新:
select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3;
public Set<Magistrado> get3Magistrado() {
ConnectionDataBase cdb = new ConnectionDataBase();
Set<Magistrado> magistrados = null;
try {
Query createQuery = cdb.getSession().createQuery("select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3");
// Here, HELP!
if (magistrados == null) {
return null;
}
}
catch (HibernateException he) {
cdb.catchException(he);
}
finally {
cdb.closeSession();
}
return magistrados;
}
public class Subject implements java.io.Serializable {
private Integer id;
private String subName;
private String day;
private String time;
private Set<Student> students = new HashSet<>();
...
public class Student implements java.io.Serializable {
private Integer id;
private String FName;
private String LName;
private int age;
private Set subjects = new HashSet();
...
Query q = s.createQuery("FROM com.hibernate.entities.Subject sub JOIN sub.students s WHERE s.id= :stu_id")
.setInteger("stu_id", 1);
List<String> subj = q.list();
for (String ss : subj) {
System.out.println(ss);
}
如果您使用的是已识别的关系:
mysql> select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3;
+--------------+----------------+
| idMagistrado | numeroDemandas |
+--------------+----------------+
| 3 | 1 |
| 2 | 2 |
| 1 | 3 |
+--------------+----------------+
3 rows in set (0.00 sec)
主题:
select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3;
public Set<Magistrado> get3Magistrado() {
ConnectionDataBase cdb = new ConnectionDataBase();
Set<Magistrado> magistrados = null;
try {
Query createQuery = cdb.getSession().createQuery("select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3");
// Here, HELP!
if (magistrados == null) {
return null;
}
}
catch (HibernateException he) {
cdb.catchException(he);
}
finally {
cdb.closeSession();
}
return magistrados;
}
public class Subject implements java.io.Serializable {
private Integer id;
private String subName;
private String day;
private String time;
private Set<Student> students = new HashSet<>();
...
public class Student implements java.io.Serializable {
private Integer id;
private String FName;
private String LName;
private int age;
private Set subjects = new HashSet();
...
Query q = s.createQuery("FROM com.hibernate.entities.Subject sub JOIN sub.students s WHERE s.id= :stu_id")
.setInteger("stu_id", 1);
List<String> subj = q.list();
for (String ss : subj) {
System.out.println(ss);
}
查询:
select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3;
public Set<Magistrado> get3Magistrado() {
ConnectionDataBase cdb = new ConnectionDataBase();
Set<Magistrado> magistrados = null;
try {
Query createQuery = cdb.getSession().createQuery("select idMagistrado, count(*) as numeroDemandas from demandamagistrado group by idMagistrado order by numeroDemandas asc limit 3");
// Here, HELP!
if (magistrados == null) {
return null;
}
}
catch (HibernateException he) {
cdb.catchException(he);
}
finally {
cdb.closeSession();
}
return magistrados;
}
public class Subject implements java.io.Serializable {
private Integer id;
private String subName;
private String day;
private String time;
private Set<Student> students = new HashSet<>();
...
public class Student implements java.io.Serializable {
private Integer id;
private String FName;
private String LName;
private int age;
private Set subjects = new HashSet();
...
Query q = s.createQuery("FROM com.hibernate.entities.Subject sub JOIN sub.students s WHERE s.id= :stu_id")
.setInteger("stu_id", 1);
List<String> subj = q.list();
for (String ss : subj) {
System.out.println(ss);
}
Query q=s.createQuery(“FROM com.hibernate.entities.Subject sub JOIN sub.s,其中s.id=:stu_id”)
.setInteger(“stu_id”,1);
List SUB=q.List();
for(字符串ss:subc){
系统输出打印LN(ss);
}
我想你应该知道“HQL”不同于“SQL”;
当您使用HQL时,应该从类(而不是表)进行查询
因此,如果希望执行sql并在hibernate中获得结果:
String sql = "select idMagistrado, count(*) as numeroDemandas from demandamagistrado
group by idMagistrado order by numeroDemandas asc limit 3";
您应该以以下方式使用方法createSQLQuery(而不是createQuery):
List<Object[]> objList = cdb.getSession().createSQLQuery(sql).list();
for(Object[] objs : objList){
int idMagistrado = Integer.valueOf(objs[0]);
int numeroDemandas = Integer.valuesOf(objs[1]);
System.out.println(idMagistrado + ":" + numeroDemandas);
}
List objList=cdb.getSession().createSQLQuery(sql.List();
对于(对象[]objs:objList){
int idMagistrado=Integer.valueOf(objs[0]);
int numeroDemandas=Integer.valuesOf(objs[1]);
System.out.println(idMagistrado+“:”+numeriodemandas);
}
您刚刚创建了查询。添加magistrados=createQuery.list()代码>注释行中的代码我理解,但问题是,在您的示例中,您使用的是“非标识”关系,在我的示例中,我使用的是“标识关系”,因此第三个表“SubjectHastudeTails”不存在。我的查询是“特殊的”“。方法createSQLQuery用于SQL,createQuery用于HQL;是的,这就是我要找的。非常感谢你3.