CDI 中的 Spring-JDBC 等价物是啥?
Posted
技术标签:
【中文标题】CDI 中的 Spring-JDBC 等价物是啥?【英文标题】:What is the equivalent of Spring-JDBC in CDI?CDI 中的 Spring-JDBC 等价物是什么? 【发布时间】:2013-07-24 06:46:39 【问题描述】:考虑在新项目中用 CDI 替换 Spring,我遇到了一个问题挑战:
我们用 SQL 查询做了很多事情(JPA 不合理):调用存储过程、报告、具有复杂语法的特殊查询。
互联网上有很多CDI数据库访问的琐碎例子,对于琐碎的例子,JPA就足够了。但是如何在 JPA 中使用 SQL?
我正在寻找类似 Spring-JDBC 的东西,它具有通过 JDBC 和容器管理事务(通过注释)运行 SQL 查询的简化接口,但我还没有找到任何东西。
如何在 CDI 中使用 SQL 查询?是否可以使用 CDI 核心或扩展?
【问题讨论】:
JPA 原生查询有什么问题?它在这里处理完整的 SQL 查询(存储过程等)并保留一些 JPA 的好处,如二级缓存。 @AntoineSabot-Durand 你可以在 JPA 原生查询中使用任何表而不将它们映射到实体中吗?您可以完全禁用缓存(第一级和第二级)以进行报告查询吗?如果是,那将是我的选择。但是我只从 Hibernate 中知道 JPA,这些事情是不可能的。 【参考方案1】:规范中没有关于这样做的任何内容。您必须创建自己的库、创建事务层(或使用 Java EE 7 中的 JTA 1.2 或 Apache Deltaspike)并以这种方式构建它。我确实提到了DeltaSpike,它在(希望)即将发布的 0.5 版中将具有其中一些查询和其他数据库特定功能。
【讨论】:
DeltaSpike 有一个 Data 模块可以做很多这样的事情。 @JohnAment 是的,虽然我们仍然会遇到一些看起来像的错误,我很确定它是基于 JPA 的。如果 OP 正在使用诸如存储过程和其他 DB 特定位之类的东西,他们可能最好坚持使用 JBDC。【参考方案2】:CDI 代表上下文/依赖注入(如果我没记错的话)。它本身与 SQL 无关。将 CDI 与 JPA 结合使用可以让您使用数据库,但即使在这种情况下,JPA 也会完成所有工作。 CDI 与它关系不大。
如果您想使用本机查询并且 JPA 的 nativeQuery
还不够,您必须将 Spring-JDBC 依赖项添加到您的项目中,或者因为您要远离 Spring,另一个较小的库这会给你类似于JdbcTemplate
之类的东西。
总而言之,CDI 没有 Spring-JDBC 的等价物,就像 Spring 没有 Swing GUI 的等价物一样。
【讨论】:
嗯,要在 Spring 中使用 Swing GUI,我不必包含任何库:D 嗯,不,但原理是一样的 ;)以上是关于CDI 中的 Spring-JDBC 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Java SE 中拥有 CDI 和 JPA 的最简单方法是啥?