我是 hibernate 的初学者,已经读了很多书,但我陷入了这一点。 在我正在实现 hibertate 的 JSF 应用程序中,我有一个可在我的数据库中运行的 SQL 查询:
SELECT *
FROM CourseProduct
INNER JOIN Course
ON CourseProduct.number=Course.number
inner join Product
on CourseProduct.product=Product.product;
我正在尝试使用 hibernate 对我的 JSF 应用程序执行相同的操作。到目前为止我想出了:
List results = session.createCriteria(Course.class)
.setFetchMode("product", FetchMode.JOIN)
.setFetchMode("number", FetchMode.JOIN)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.list();
这是正确的还是完全错误的?另外,我如何访问结果中的字段(如果我必须这样做,因为 hibernate 为我填充了类)?看来我得到的结果只是类(class)表、产品中主键的值,而不是产品表中的其他2个字段。
编辑
我想我解决了我自己的问题。看起来上面的代码是正确的,我只是没有意识到为了访问 Product 类,我必须从 Course 类中的 Set 访问它!我只是使用迭代器在 Course 类中的产品集的 get 方法中获取所需的数据。
最佳答案
我想我解决了我自己的问题。看起来上面的代码是正确的,我只是没有意识到为了访问 Product 类,我必须从 Course 类中的 Set 访问它!我只是使用迭代器在 Course 类中的产品集的 get 方法中获取所需的数据。
更新:我确实解决了这个问题。我刚刚摆脱了 hibernate 。 sql 查询工作正常,使用准备好的语句获取我的数据,并使用常规的旧方式(java.sql.DriverManager)获取结果集。 由于某种原因,hibernate 驱动程序甚至不喜欢使用我的语句作为 native SQL(在尝试转换整数时不断给我一个异常)。我用谷歌搜索了这个问题,他们说这是 hibernate 中的一个错误!
关于java - sql查询进入hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034733/