java - hibernate 和准备好的语句

标签 java hibernate jdbc

据我从谷歌上找到的,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/

相关文章:

java - 使用java在访问表中搜索值

tomcat - 我应该如何在基于 servlet 的应用程序中连接到 JDBC 数据库/数据源?

java - 根据 Tomcat 中的请求检查用户

java - 记录任意对象

java - 应用程序空闲时出现连接超时错误

java - Apache HttpComponents : org. apache.http.client.ClientProtocolException

java - 批量插入导致失败

java - 在遗留软件中混合编程式和声明式事务

java - 向表中插入值时出现错误

jpa - 从 JPA 迁移回简单的 SQL