【问题标题】:Using Hibernate and Jdbc both in Spring Framework 3.0在 Spring Framework 3.0 中使用 Hibernate 和 Jdbc
【发布时间】:2012-03-23 06:06:00
【问题描述】:

我正在开发一个使用 Spring 3.0、hibernate 3.0 的项目。我的项目有控制器、服务和 DAO 层。 Daos(用hibernate编写)从服务层访问。现在的要求是我需要同时使用 Hibernate 和 JDBC。休眠部分约为 80-90%。对于剩余的 10%,我必须使用简单的 JDBC(可以使用 JdbcTemplate)。请建议我,我如何同时使用hibernate和Jdbc。我需要具有分离性、可重用性的设计。还有怎么在Spring中实现呢?

欢迎提出任何建议。

提前致谢!!

【问题讨论】:

    标签: java spring hibernate jdbc


    【解决方案1】:

    您可以安全地将 hibernate 与 spring JDBC 混合使用,并且两者都应该能够共享由 HibernateTransactionManager 管理的事务。请记住,您应该使用 spring 模板来实现这一点,因为它们能够检测和重用活动事务的线程绑定连接。如果出于某种原因您想添加另一个基于 jdbc 的库(例如 groovy sql),您仍然可以通过 spring DataSourceUtils 来实现。

    当 hibernate 和 spring jdbc 模板都对相同的数据进行操作时,可能会出现唯一的潜在问题。 Hibernate 可能会延迟数据库更新,然后 spring jdbc 会访问过时的数据。我对这种交互的经验来自旧版本的 spring,现在可能有一些机制可以解决这个问题。

    【讨论】:

    • 你能告诉我如何使用它吗?任何关于如何获得连接以及如何使用它的示例?
    • 使用 spring jdbc 你不需要手动获取连接或管理它,你提供回调(rowmappers)来处理数据。解释和示例最好参考优秀的 spring 文档。
    • 事务管理器呢?我使用过 HibernateTransactionManager。
    • HibernateTransactionManager 基本上完成了DataSourceTransactionManager 所做的一切,此外它还管理休眠会话。两者都使用相同的底层机制将事务+连接绑定到线程。
    • 谢谢!我也在static.springsource.org/spring/docs/3.0.x/javadoc-api/org/… 确认了这个答案
    【解决方案2】:

    我写这个答案是希望人们能改进我的答案,因为这可能不是最好的答案,所以请发表评论。

    在休眠中,您可以使用命名的本机查询 例如:http://www.java2s.com/Code/Java/JPA/UsingNamedNativeQuery.htm 向下滚动一点,找到文件:Professor.java 你可以使用这个例子。这样您就可以从休眠状态触发原生查询。

    【讨论】:

    • 好吧,如何创建数据访问层(DAO 是对象,我建议创建一个自定义层),以便根据需要使用 Hibernate 功能和 Native JDBC。这就像你有一个另一个层(接口),它有一些方法来执行你希望使用 CRUD 等休眠功能完成的操作,你还支持构建自定义休眠查询(OR、Between、AND 等)并且您有方法进行简单的 JDBC 查询并返回结果集(Recordset)
    • 你会拥有同一个 DAO 的多个实现吗?即:PersonDaoHibernate 和 PersonDaoJdbc?
    • @BrandonV 所以我们有 DAO(映射到表的普通类),它将包含所有休眠注释。然后是另一层数据访问层,其中使用通用模板创建类并在 T 上执行操作,如 (类模板)。也可能是同一个类或者像你说的PersonalDaoJDBC可以有jdbc查询机制。
    猜你喜欢
    • 2011-08-22
    • 2023-04-08
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多