【问题标题】:GlassFish 4.1 + Hibernate 4.3 = Cannot override mapping through orm.xmlGlassFish 4.1 + Hibernate 4.3 = 无法通过 orm.xml 覆盖映射
【发布时间】:2015-01-07 08:56:57
【问题描述】:

当我尝试通过orm.xml 文件覆盖实体的映射时出现此异常:

2014-11-10T20:08:30.815+0100|Severe: Exception while preparing the app : [PersistenceUnit: irems-main] Unable to build Hibernate SessionFactory
org.hibernate.DuplicateMappingException: Duplicate class/entity mapping testing_ejb.MyAddress
at org.hibernate.cfg.Configuration$MappingsImpl.addClass(Configuration.java:2835)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:816)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3788)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3742)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:199)
at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:107)
at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:223)
at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:230)
at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)

您可以从here下载SSCCE

它只包含两个项目(EAR + EJB)和一个由 bean 管理的映射实体。相应的实体用@Entity标记,并映射在orm.xml

部署时发生错误。

【问题讨论】:

    标签: java hibernate glassfish hibernate-mapping glassfish-4


    【解决方案1】:

    orm xml 中更改您的实体声明,如下所示:

    <entity name="Employee" class="testing_ejb.MyAddress" metadata-complete="false">
    </entity>
    

    此外,META-INF/orm.xml 必须位于您的 persistence.xml 配置文件旁边。将 orm.xml 从子 jar 移动到根 persistence.xml 所在的位置。

    【讨论】:

    • 你测试了吗?仍然对我不起作用。它与 Hibernate 套件的放置有关吗?因为使用 GF3,您可以选择是否要使用 Hibernate。 GF4 没有。
    • 检查我更新的答案。我认为 orm.xml 必须与 persistence.xml 搭配使用。
    • 仍然没有变化。我的设置可能有问题吗?你能重现这个问题吗?
    • 我现在的机器上没有 GC,所以我无法复制它。
    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多