【发布时间】:2016-11-12 21:53:30
【问题描述】:
这是一个错误:
Exception in thread "main" javax.persistence.PersistenceException: Unable to build entity manager factory
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:66)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at ru.leon0399.podius.home.Core.run(Core.java:39)
at ru.leon0399.podius.home.Core.main(Core.java:34)
Caused by: java.lang.IllegalStateException: Duplicate XML entry for ru.leon0399.podius.common.entity.AbstractEntity
at org.hibernate.cfg.annotations.reflection.XMLContext.addClass(XMLContext.java:140)
at org.hibernate.cfg.annotations.reflection.XMLContext.addDocument(XMLContext.java:108)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.<init>(AnnotationMetadataSourceProcessorImpl.java:93)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.<init>(MetadataBuildingProcess.java:147)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:141)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:857)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:884)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
... 4 more
这是我的 orm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
version="2.0">
<mapped-superclass class="ru.leon0399.podius.common.entity.AbstractEntity">
<attributes>
<id name="uuid">
<column name="uuid" column-definition="BINARY(16)"/>
</id>
<basic name="createdAt">
<column name="created_at" updatable="false"/>
<temporal>TIMESTAMP</temporal>
</basic>
<basic name="updatedAt">
<column name="updated_at"/>
<temporal>TIMESTAMP</temporal>
</basic>
</attributes>
</mapped-superclass>
这是我的 AbstractEntity 类
public abstract class AbstractEntity implements Creatable, Updatable, Entity {
private static final long serialVersionUID = 2544875895016856663L;
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractEntity.class);
private UUID uuid = UUID.randomUUID();
private Date updatedAt;
private Date createdAt;
// Getters and setters
}
如您所见,没有重复
调试后,我明白,那个文件orm.xml 被读取了两次!
这是确认此想法的屏幕截图
那么我怎样才能告诉 Hibernate 不要读取这个文件两次呢?
【问题讨论】:
-
我猜
AbstractEntity没有注释为 MappedSuperclass 对吧? -
你能给我们展示一下 AbstractEntity 类吗?
-
@aksappy 我已经更新了我的主题
-
@Apostolos 我没有在代码中用任何注释注释任何类