我有两个表,第一个包含员工:
@Entity
public class Employee {
@Id
@GeneratedValue
private long id;
private String firstName;
private String lastName;
private double Salary;
@ManyToMany(mappedBy = "employees")
private List<Project> projects;
//getters and setters
}
第二个包含项目:
@Entity
public class Project {
@Id
@GeneratedValue
private long id;
private String name;
@ManyToMany
private List<Employee> employees;
//getters and setters
}
我想选择目前正在项目中工作的所有员工,例如&#34; ProjectOne&#34;。什么是在hibernate中编写此查询的最佳方法,是否有使用TypedQuery的选项?或者我需要使用普通的查询?我试着写一些像:
Query query= entityManager.createQuery("select e,p from Employee e, Project p where p.name='ProjectOne' ");
List<Employee>queryResultList=query.getResultList();
我已经从hibernate得到了一些回应,但这是一个奇怪的参考,我无法正确阅读。
编辑:我认为答案会更容易。如果查询返回2个值,首先必须将其转换为Object [],然后可以从object [0]转换第一个值(Employee),从object [1]转换第二个(Project):Iterator iterator=queryResultList.iterator();
while(iterator.hasNext()){
Object[] object= (Object[]) iterator.next();
Employee emp= (Employee) object[0];
Project proj= (Project) object[1];
System.out.println(emp.getFirstName()+" "+emp.getLastName()+" at project "+proj.getName());
}