小编Sha*_*dra的帖子

从JBoss EAP 6.1中排除JPA子系统 - 试图在JBoss EAP 6.1中使用JPA 2.1

我有一个war应用程序,其中包含使用Spring容器打包和引导的JPA 2.1 API和Hibernate 4.3.0.Final(JPA 2.1实现),我想在JBoss EAP 6.1中部署它.

我知道JBoss EAP 6.1符合JPA 2.0所以我决定强迫JBoss在我的应用程序中使用JPA版本和实现

我试图做的是使用jboss-deployment-structure.xml排除JPA子系统,但我发现即使我从standalone.xml注释掉JPA扩展和JPA子系统并将JPA子系统排除在jboss-deployment-中 - structure.xml(也排除org.hibernate模块使用在应用程序中打包的hibernate),没有运行JPA扫描程序(如预期的那样),但任何war类(在我的情况下是Spring容器)中指的是javax.persistence类,API从JBoss模块加载(modules/system/layers/base/javax/persistence/api/main/hibernate-jpa-2.0-1.0.1.Final-redhat-2.jar!)提供的API jar的INSTEAD在战争中提供.所以很明显我在战争应用程序中得到了JBoss提供的API(2.0)及其实现(2.1)不匹配的例外.一个例外是例如,注释javax.persistence.Table的索引相关属性无法识别,因为这是JPA 2.1中的一个附加项,在JPA 2.0中不可用

我可以通过用JPA 2.1替换modules目录中的JPA 2.0 API(并将module.xml指向新的2.1 API jar)解决这个问题,一切正常.但是我认为这不是正确的方法,因为这就像尝试更改所有应用程序的服务器行为一样.

这是有意的JBoss类加载行为,所有规范API类(其中JBoss是实现者)将始终优先考虑所使用的实现,无论我们告诉它使用应用程序内的特定API.我认为制作一个符合规范的特定服务器,然后提供覆盖规范版本本身的方法有些矛盾,但有没有办法可以在我的应用程序中干净地使用API​​和实现?

另一个选择是转移到Wildfly,这是JPA 2.1的实现,但我的问题是在JBoss EAP 6.1中这是否干净利落?

jboss spring hibernate jpa

11
推荐指数
3
解决办法
1万
查看次数

引起:org.hibernate.AnnotationException:mappedBy 引用了一个未知的目标实体属性:

 @Entity
public class Purveyor implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int ref_purveyor;

    @Column(unique = true)
    private String purveyor_name;

    @Column(unique = true)
    private int purveyor_number;

    @Column(unique = true)
    private String adress;

    @Column(unique = true)
    private int fax;

    /**
     * 
     * @return This returns the purveyor's ID.
     */
    public int getRef_purveyor() {
        return ref_purveyor;
    }

    /**
     * 
     * @param ref_purveyor
     *            This refers to the ID of the new purveyor. …
Run Code Online (Sandbox Code Playgroud)

jpa-2.0

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

hibernate ×1

jboss ×1

jpa ×1

jpa-2.0 ×1

spring ×1