我使用hibernate-maven-plugin引导数据库,使用它在其执行的maven模块中扫描的模型。
不幸的是,当hibernate抛出这个时它会停止:
org.hibernate.tool.schema.spi.SchemaManagementException: SQL strings added more than once for: reference_data_source.UK-UK_9ec6wdvyj3mjagiptcnrq2txv
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.checkExportIdentifier(SchemaCreatorImpl.java:299)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:255)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:128)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:199)
所以,我有两个持久性单元,两个都存在一些表。 Hibernate似乎把它解释为同一个表,所以当它试图存储相同的索引时,但是对于另一个模式,它不会认为它是重复的。他们的代码可以找到here。
我不知道如何处理这个问题,无论如何配置hibernate hbm2ddl来跟踪这些不同的持久性单元?
这是hibernate-maven-plugin的配置:
<plugin>
<groupId>de.juplo</groupId>
<artifactId>hibernate-maven-plugin</artifactId>
<version>2.0.0</version>
<configuration>
<detail>true</detail>
<persistenceUnit>mainPersistenceUnit</persistenceUnit>
<driver>com.mysql.jdbc.Driver</driver>
<dialect>org.hibernate.dialect.MySQL5Dialect</dialect>
<force>true</force>
<url><![CDATA[jdbc:mysql://localhost/auto_bootstrap_schema]]></url>
<username>user</username>
<password>pass</password>
</configuration>
<executions>
<execution>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
</dependencies>
</plugin>
答案 0 :(得分:4)
我有同样的问题。在我的情况下,原因是我有三个实体,它们以相同的前缀名称开头,并且与每个更专业的实体有一个OneToMany关系:
Person
PersonCard
PersonCardLayout
将模型重命名为此解决了我的问题:
Person
Card
Layout
这似乎是Hibernate中的错误。
答案 1 :(得分:2)
我有同样的问题,看起来像是一个错误: org.hibernate.mapping.UniqueKey#getExportIdentifier
@Override
public String getExportIdentifier() {
return StringHelper.qualify( getTable().getName(), "UK-" + getName() );
}
因为标识符仅根据表名构建,而没有表的架构/目录。
因此,如果必须使用具有相同表名但架构不同的实体,并且在这些实体中具有相同名称和“ unique = true”的两个属性,则会陷入该错误中。
答案 2 :(得分:1)
对此的另一种解决方案是使用@Table。
例如:
@Table(name =“ PERSON”)
当我有两个表示两个实体(@Entity)的类时,这发生在我身上:
@实体 公共类用户{...}
@实体 公共类UserRoles {...}
我通过如下指定表名来解决此错误:
@Entity
@Table(name="USER")
public class User {...}
并且:
@Table(name="USER_ROLES")
@Entity
public class UserRoles {...}
答案 3 :(得分:0)
不确定这是否与我遇到的相同,但我对使用@Entity注释标记的基类有同样的错误问题:更改为@MappedSuperclass删除了错误。
祝你好运, 射线