Java 如何使用hibernate查询联接表?
我在Oracle SQL Developer中创建了三个表,即Java 如何使用hibernate查询联接表?,java,oracle,hibernate,Java,Oracle,Hibernate,我在Oracle SQL Developer中创建了三个表,即 1.测试员工2 2.测试项目2 3.员工项目2 表Employee\u Project2是联接表,因为Test\u Project2和Employee\u Project2之间的关系是多对多 在hibernate中,我分别为Test\u Project2和Employee\u Project2表创建了两个hibernate类TestEmployee和TestProject, 表Employee\u Project2在TestProj
1.测试员工2
2.测试项目2
3.员工项目2
表
Employee\u Project2
是联接表,因为Test\u Project2
和Employee\u Project2
之间的关系是多对多
在hibernate中,我分别为
Test\u Project2
和Employee\u Project2
表创建了两个hibernate类TestEmployee
和TestProject
,表
Employee\u Project2
在TestProject
hibernate类中定义如下:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Employee_Project2", joinColumns = @JoinColumn(name = "proj_id"), inverseJoinColumns = @JoinColumn(name = "emp_id"))
private Set<TestEmployee> employeesList;
String hql = "FROM Employee_Project2";
Query query = session.createQuery(hql);
List results = query.list();
for (Object row : results) {
//what to do here
}
尽管联接表'Employee_Project2'不是hibernate类,但我如何做到这一点
更新:
我想检索hibernate表“TestProject”中的所有记录,因此我编写了以下代码
String hql = "FROM TestProject";
Query query = session.createQuery(hql);
List results = query.list();
System.out.println("results.get(0)" + results.get(0).toString());
现在的问题是,在运行时,我收到如下内容
results.get(0)msc.hibernate.persistence.TestProject@12ec9534
如何获取每行中包含的值???您要做的是创建类型化查询。通过适当的映射,您也可以获得相关对象-无需查询联接表,因为
ORM
将为您完成此操作:
Query query = session.createQuery(hql);
List<TestProject> results = query.list();
for (TestProject row : results) {
//what to do here
// do whatever you want
}
queryquery=session.createQuery(hql);
List results=query.List();
用于(测试项目行:结果){
//在这里做什么
//你想干什么就干什么
}
使用propper关系映射,您可以获得如下关系:
for (TestProject row : results) {
Set<TestEmployee> employees=row.getEmployeesList();
// do more work.
}
for(测试项目行:结果){
Set employees=row.getEmployeesList();
//做更多的工作。
}
至于“如何”这个主题太宽泛了,无法用一个答案来回答。但是你应该可以从这里开始-你要做的是创建类型化查询。通过适当的映射,您也可以获得相关对象-无需查询联接表,因为
ORM
将为您完成此操作:
Query query = session.createQuery(hql);
List<TestProject> results = query.list();
for (TestProject row : results) {
//what to do here
// do whatever you want
}
queryquery=session.createQuery(hql);
List results=query.List();
用于(测试项目行:结果){
//在这里做什么
//你想干什么就干什么
}
使用propper关系映射,您可以获得如下关系:
for (TestProject row : results) {
Set<TestEmployee> employees=row.getEmployeesList();
// do more work.
}
for(测试项目行:结果){
Set employees=row.getEmployeesList();
//做更多的工作。
}
至于“如何做”-主题太广泛,无法用单一答案等来回答。但您应该能够从这里开始-为什么要这样做,您可以使用fetch Earge选择所有项目,您将获得所有相关员工,如果您有双向项目,则项目也是如此mapping@AmerQarabsa你能提供一个例子吗?mysql和sql server与这个问题有什么关系?你似乎在问一个X/Y问题的结果。你想要X,但你问的是Y。我会问X。你想要实现什么?你想询问什么数据?我无法想象它是该联接表中的所有数据,因为这样您可能会多次面对相同的实体。例如,您想询问员工属于哪些项目吗?@Gimby我想,例如,要检索join tbale“employee_Project2”中的所有记录,为什么要这样做,您可以使用fetch Earge选择所有项目,您将获得所有相关员工,如果您有双向项目,则项目也是如此mapping@AmerQarabsa你能提供一个例子吗?mysql和sql server与这个问题有什么关系?你似乎在问一个X/Y问题的结果。你想要X,但你问的是Y。我会问X。你想要实现什么?你想询问什么数据?我无法想象它是该联接表中的所有数据,因为这样您可能会多次面对相同的实体。例如,您想询问员工属于哪个项目吗?@Gimby我想检索join tbale“employee_Project2”中的所有记录,但实际上,当我将查询参数化时,它不起作用,如您的答案所示。它在如下情况下起作用:String hql=“FROM TestProject”;Query=session.createQuery(hql);List results=query.List()@user2121事实上,iv是从JPA获得的;(但实际上,当我如您的答案中所示对查询进行参数化时,它不起作用。)它在如下情况下起作用:String hql=“FROM TestProject”;Query Query Query=session.createQuery(hql);List results=Query.List();@user2121确实,我是从
JPA
中获取它的(