Java 如何使用hibernate查询联接表?

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

我在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
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
中获取它的(