据我从谷歌上找到的,hibernate 使用 PreparedStatement查询。
我需要执行一个由两部分组成的查询,第一部分可以写在hibernate条件中,第二部分是一个dblink查询,因此不能使用hibernate。
所以,我想提取 PreparedStatement来自 Criteria 对象的对象。
Criteria criteria = getSession().createCriteria(Entity.class);
//adding restrictions
PreparedStatement stmt;
//initializing stmt with criteria's PreparedStatement
我该怎么做? 有可能吗?
最佳答案
这对于当前的 Hibernate API 是不可能的。而且无论如何都很难添加对它的支持。例如,要在没有任何其他限制的情况下执行 getSession().createCriteria(Entity.class)
,Hibernate 可能需要生成多个 PreparedStatement(以获取 Entity
和所有它的关联,基于为 Entity
类定义的获取计划和策略。
此外,如果存在类似的事件,您将很难实现和维护这样的解决方案事件。您可能需要解析生成的语句才能“注入(inject)”您的查询部分。或者生成的语句可能会在您修改实体时或根据持久性上下文的当前状态而改变( session 中已经存在的内容不会再次获取,因此查询不同等)。将 Hibernate 升级到新版本时,您还需要小心,因为生成的查询的确切结构可能会发生变化。
可能还有很多其他障碍暂时很难实现,但我认为你的推理很好,希望 Hibernate 将来会公开某种 API,这将使我们有更大的影响力在生成的 SQL 上。
关于java - hibernate 和准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30394907/