【问题标题】:javax.persistence in java-6-openjdkjava-6-openjdk 中的 javax.persistence
【发布时间】:2010-11-19 10:51:57
【问题描述】:

我正在尝试在我的 hudson 集成服务器上构建 Spring Roo 项目(= Spring MVC + aspectj + hibernate)。

项目已配置好使用

<dependency>
<groupId>javax.persistence</groupId>
<artifactId>com.springsource.javax.persistence</artifactId>
<version>1.0.0</version>
</dependency>

使用我的本地 maven 构建工作正常,但服务器上的环境似乎注入了一些其他版本的 javax.persistence,这会导致这些错误:

[ERROR] The method createQuery(String) in the type EntityManager is not applicable for the arguments (String, Class<Long>)
[ERROR] The method createQuery(String) in the type EntityManager is not applicable for the arguments (String, Class<Folder>)

构建是用 maven 运行的,它的配置是:

Apache Maven 2.2.1 (rdebian-4)
Java version: 1.6.0_18
Java home: /usr/lib/jvm/java-6-openjdk/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux" version: "2.6.32-5-amd64" arch: "amd64" Family: "unix"

编辑:我没有在本地和服务器上使用相同版本的 roo :)

【问题讨论】:

    标签: java maven-2 hudson spring-roo openjdk


    【解决方案1】:

    您在项目中使用 JPA2 吗?

    JPA2 是 Java EE 6 的一部分,据我所知,您使用的是 this 方法:

    <T> TypedQuery<T> createQuery(java.lang.String qlString, java.lang.Class<T> resultClass)
    

    这种方法在 JPA1 (Java EE 5) 中不存在,您可以通过检查 EntityManager 看到只有

    Query createQuery(String qlString)
    

    存在。

    所有这一切都意味着 Hudson 将 javax.persistence 用于 JPA1。我没有用过 Hudson,所以你必须弄清楚你是否可以让它使用 javax.persistence 用于 JPA2。

    【讨论】:

    • 很好的分析(+1)。但我认为问题不在于哈德森。我认为maven依赖是错误的
    • 我发现了我的问题! Roo 实际上为您生成代码。在我的本地机器上,我使用了 Roo 1.0.1,它生成 JPA1 代码并添加了持久性 v1 依赖项。但是在服务器上我安装了生成 JPA2 代码的 roo 1.1,并尝试根据我提交的 pom.xml 进行编译 ..
    【解决方案2】:

    奇怪的是它在本地工作。

    您依赖于 JPA 1,但使用 JPA 2 (createQuery(query, class)) 的方法。

    检查您的本地类路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多