hibernate - 在 Tomcat 上运行 JPA

标签 hibernate spring-mvc jpa-2.0 maven-3 tomcat7

我正在构建一个 Maven 测试项目,该项目运行:
Spring MVC 3.1.1
JPA,以 Hibernate 4.1.4 作为 jpa 提供者
MYSQL 5.5.x
汤姆猫 7

我正在尝试创建一个简单的端到端基本用例,其中涉及从数据库读取和更新。
因为我喜欢坚持使用纯 JPA,所以我使用 spring 的 LocalContainerEntityManagerFactoryBean,使用 @PersistenceContext 注释注入(inject)到我的 dao 中。

我此时遇到的问题:

  • 我无法坚持到 DB(没有抛出异常,但也没有 db 反射)。
  • 我无法删除表单 DB(没有抛出异常,但也没有 db 反射)。

  • 我可以从数据库中读取。

    在查看文档后,我发现我可能会缺少一些 JPA 支持,因为 TOMCAT 不包括开箱即用。

    我经历了thisthisthat (还有更多..)并应用了以下内容:
  • 在我的 pom.xml 中添加了 spring-instrument-tomcat 依赖项(只是为了检索 jar)。
  • 我将那个 jar 复制到我的 tomcat 的 lib 目录
  • 在 META-INF 目录下,我创建了一个 context.xml 文件,内容如下:
    <Context docBase="SpringTest" path="/SpringTest" reloadable="true"
        source="org.eclipse.jst.jee.server:SpringTest">
        <Loader
            loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"
            useSystemClassLoaderAsParent="false" />
    </Context>
    
  • 我将 InstrumentationLoadTimeWeaver 添加到我的实体管理器定义

  • 这应该可以解决问题 - 但事实并非如此。我经历了同样的行为。

    然后遇到了this来自stackoverflow的问题。建议添加事务定义的答案之一:<tx:annotation-driven proxy-target-class="true" />到 DispatcherServlet 上下文(到目前为止,我只在我的根应用程序上下文中使用它)。在做完这些事情开始解决之后,事务被提交到数据库。

    在这一点上,我开始怀疑是否仍然需要所有其余的东西,所以我回滚了除了添加到 DispatcherServlet 之外所做的所有事情,它仍然可以正常工作!

    所以,我的问题:它是如何工作的?我真的需要所有这些来支持tomcat中的JPA吗?最后,为什么我需要将声明复制到 DispatcherServlet 才能解决这个问题?

    提前致谢,
    Yaga 士

    最佳答案

    您不需要“spring-instrument-tomcat 对我的 pom.xml 的依赖”来对您的数据库进行 CRUD。您可以读取但不能写入或更新数据库的事实为零,这表明缺少 spring-transactions 的配置良好(正确注释 @Transactional,正确声明注释驱动的 spring 上下文)。不要用 unessecary jar 加载 Tomcat。
    在 Spring-source 工具包中启动一个新的 spring 模板项目(Simple spring jpa utility project)并检查 spring-hibernate-jpa 项目真正需要哪些依赖项

    关于hibernate - 在 Tomcat 上运行 JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12025956/

    相关文章:

    spring - JPA @EntityListener 未按预期工作

    尽管刷新和事务提交, hibernate 实体属性没有被持久化到数据库中

    java - 使用 Java+Hibernate+DB2 获得正确的别名映射的挑战

    java - 尝试通过 Spring Boot Rest 使用 Jackson 验证 JSON

    java - 对象存储到数据库后如何检索ID

    java - JPA Embeddable 可以具有 ElementCollection<Embeddable> 属性

    hibernate - 检查当前日期是否在开始日期和结束日期之间

    java - 如何使用 spring-mvc 访问 mysql 中的特定表

    java - 如何使用 @ResponseBody 从 Spring Controller 返回 JSON 数据

    jakarta-ee - WebLogic Server 10.3.6 中的 JPA 2.0