如何使用hibernate查询连接表?
我在Oracle SQL Developer中创建了三个表
1.Test_Employee2
2.Test_Project2
3.Employee_Project2
。
表Employee_Project2
是连接表,因为Test_Project2
和Employee_Project2
之间的关系是Many-To-Many
。
在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 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 results = query.list(); for (TestProject row : results) { //what to do here // do whatever you want }
通过propper关系映射,您可以获得如下关系:
for (TestProject row : results) { Set employees=row.getEmployeesList(); // do more work. }
至于“如何” – 主题太宽泛,无法用单一答案等来涵盖它,但你应该可以从这里开始 – http://hibernate.org/orm/documentation/5.1/
- Maven – 如何为hibernate添加所有必需的依赖项?
- 如何在Wildfly中部署时使用persistence.xml设置hibernate.hbm2ddl.auto
- HibernateException:当’hibernate.dialect’未设置时,对DialectResolutionInfo的访问不能为null
- Spring和Hibernate突然将事务设置为readonly
- Hibernate中的自然标识符是什么?
- 在运行时动态禁用hibernatevalidation注释?
- 使用JUnit4进行测试时,Spring @transactional不会启动事务
- Sprint引导数据JPA:没有类型为’java.util.Set ‘的限定bean
- 在分层Spring MVC Web应用程序中处理Hibernate Sessions的最佳方法