Java 用于选择多个值的Hibernate查询

Java 用于选择多个值的Hibernate查询,java,hibernate,hql,Java,Hibernate,Hql,在hibernate中,我可以执行以下操作 Query q = session.createQuery("from Employee as e); List<Employee> emps = q.list(); 现在列表的结构是什么?您应该使用一个新对象来保存这些值,如下所示: "SELECT NEW EmpMenu(e.name, e.department.name) " + "FROM Project p JOIN p.students e "

在hibernate中,我可以执行以下操作

Query q = session.createQuery("from Employee as e);
List<Employee> emps = q.list();

现在列表的结构是什么?

您应该使用一个新对象来保存这些值,如下所示:

"SELECT NEW EmpMenu(e.name, e.department.name) "
                + "FROM Project p JOIN p.students e " + "WHERE p.name = :project "
                + "ORDER BY e.name").setParameter("project", projectName).getResultList()
List ans = q.list();
for(Object[] array : ans) {
    String firstName = (String) array[0];
    Integer id = (Integer) array[1];
}

我从

中得到了这个示例,您将得到一个
对象
数组的列表(每个数组有两个元素)

Listemployees=q.List();
对于(对象[]员工:员工){
//员工[0]将包含名字
//员工[1]将保留ID
}

这很好。您唯一需要了解的是,它将返回
Object[]
列表,如下所示:

     Query q = session.createQuery("select e.id, e.firstName from Employee e");
     List<Object[]> employees= (List<Object[]>)q.list();
     for(Object[] employee: employees){
         Integer id = (Integer)employee[0];
         String firstName = (String)employee[1];
         .....
     }
Query q=session.createQuery(“从员工e中选择e.id,e.firstName”);
List employees=(List)q.List();
对于(对象[]员工:员工){
整数id=(整数)员工[0];
String firstName=(String)employee[1];
.....
}
不带迭代器:

@SuppressWarnings( "unchecked" ) 
public List<Employee> findByDepartment(long departmentId){ 

    SQLQuery query = session.createSQLQuery("SELECT {emp.*} " +
                                             " FROM employee emp " + 
                                            +"WHERE emp.department_id = :departement_id");
    query.setLong("department_id",  departmentId);
    query.addEntity("emp",  Employee.class);                        
    return (List<Employee>) = query.list();
}
@SuppressWarnings(“未选中”)
公共列表FindBydeDepartment(长部门ID){
SQLQuery=session.createSQLQuery(“选择{emp.*}”+
“来自员工emp”+
+“其中emp.department\u id=:department\u id”);
query.setLong(“部门id”,部门id);
查询补遗(“emp”,Employee.class);
return(List)=query.List();
}

如果我有一个多对多关系,并且中间表没有建模为类,该怎么办。如何在hql查询中使用该表?@user93796 Hibernate还允许您运行标准的
SQL
,您可以将其创建为:
query q=session.createSQLQuery(“从员工中选择id,第一个姓名”)
其中
createSQLQuery
用于运行SQL;id&first_Name是数据库列,Employee是数据库表。@user93796不确定我的上一条消息是否清晰。我的意思是:如果您想在查询中使用未映射的表,那么
SQL
是更好的选择。谢谢您的帮助。让我澄清一下。表A和表B之间有很多对多的实现。表C映射A到B。B和B的HASE集已经设置了A。现在,我想选择所有B B1作为其集合中的实体之一。例如,考虑StAdvOp溢出。我想选择所有具有java作为其标签之一的POST。在这种情况下,表是Post,B是标记,C是A和B之间的关系。如何使用HQL@user93796:这是一个与您之前发布的问题截然不同的问题。无论如何,请尝试以下操作:
从Post p join p.tags t where t.tagName in('Java')中选择p
。如果您正确地完成了映射,这应该可以完成您的工作。数组的顺序是否由查询的顺序决定?请签出。在我看来,它比这里的答案更优雅,只是您需要在HQL中使用别名。
List< Object[] > employees = q.list();

for ( Object[] employee : employees ) {
    // employee[0] will contain the first name
    // employee[1] will contail the ID
}
     Query q = session.createQuery("select e.id, e.firstName from Employee e");
     List<Object[]> employees= (List<Object[]>)q.list();
     for(Object[] employee: employees){
         Integer id = (Integer)employee[0];
         String firstName = (String)employee[1];
         .....
     }
Query qry=session.createQuery("select e.employeeId,e.employeeName from Employee e where e.deptNumber=:p1");
qry.setParameter("p1",30);
List l2=qry.list();
Iterator itr=l2.iterator();
while(itr.hasNext()){
Object a[]=(Object[])itr.next();
System.out.println(a[0]+"/t"a[1]);
}
@SuppressWarnings( "unchecked" ) 
public List<Employee> findByDepartment(long departmentId){ 

    SQLQuery query = session.createSQLQuery("SELECT {emp.*} " +
                                             " FROM employee emp " + 
                                            +"WHERE emp.department_id = :departement_id");
    query.setLong("department_id",  departmentId);
    query.addEntity("emp",  Employee.class);                        
    return (List<Employee>) = query.list();
}