我在 Oracle SQL Developer 中创建了三个表,即
1.Test_Employee2
2.Test_Project2
3.Employee_Project2
。
Employee_Project2
表是联接表,因为 Test_Project2
和 Employee_Project2
之间的关系是多对多
。
在 hibernate 中,我分别为 Test_Project2
和 Employee_Project2
表创建了两个 hibernate 类 TestEmployee
和 TestProject
,
表 Employee_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;
我用一些记录填充了表 Test_Project2
和 Employee_Project2
,并且连接表 Employee_Project2
自动填充了一些记录。
现在我目前面临的问题是,我想使用 hiberante 在连接表 Employee_Project2
上使用一个简单的 select 语句,如下所示:
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
}
通过适当的关系映射,您可以获得如下关系:
for (TestProject row : results) {
Set<TestEmployee> employees=row.getEmployeesList();
// do more work.
}
至于“如何” - 该主题太广泛,无法用单个答案等涵盖它,但您应该能够从这里开始 - http://hibernate.org/orm/documentation/5.1/
关于java - 如何使用hibernate查询连接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39848443/