Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为:tablename多次添加SQL字符串_Java_Hibernate - Fatal编程技术网

Java 为:tablename多次添加SQL字符串

Java 为:tablename多次添加SQL字符串,java,hibernate,Java,Hibernate,我正在引导一个数据库,使用它在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.S

我正在引导一个数据库,使用它在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)
org.hibernate.tool.schema.spi.SchemaManagementException:为以下内容添加了多次SQL字符串:reference\u data\u source.UK-UK\u 9ec6wdvyj3mjagiptcnrq2txv
位于org.hibernate.tool.schema.internal.SchemaCreatorImpl.checkExportIdentifier(SchemaCreatorImpl.java:299)
位于org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:255)
位于org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:128)
位于org.hibernate.tool.hbm2ddl.SchemaExport.(SchemaExport.java:199)
所以,我有两个持久性单元,两个单元中都存在一些表。Hibernate似乎将其解释为同一个表,因此当它尝试存储同一个索引时,但对于另一个模式,它无法认为它是重复的。他们的代码可以找到

我不知道如何实现这一点,无论如何配置hibernate hbm2ddl来跟踪这些不同的Perience单元

这是hibernate maven插件的配置:

<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>

德朱普洛
HibernateMaven插件
2.0.0
真的
维护持久性单元
com.mysql.jdbc.Driver
org.hibernate.dialogue.mysql5dialogue
真的
用户
通过
创造
mysql
mysql连接器java
${mysql connector java.version}

不确定这是否与我遇到的相同,但我遇到了与标有@Entity annotation的基类相同的错误问题:更改为@MappedSuperclass删除了该错误

祝你好运,
Ray

我也有同样的问题,看起来像是一个bug: org.hibernate.mapping.UniqueKey#getExportIdentifier

@Override
public String getExportIdentifier() {
    return StringHelper.qualify( getTable().getName(), "UK-" + getName() );
}
因为标识符只根据表名生成,而没有表的架构/目录


因此,如果必须创建具有相同表名但不同模式的实体,并且在这些实体中有两个具有相同名称且“unique=true”的属性,那么您将陷入错误。

我也遇到了同样的问题。在我的案例中,原因是我有三个实体以相同的前缀名称开头,每个实体都有一个单独的关系:

Person
PersonCard
PersonCardLayout
将模型重命名为此解决了我的问题:

Person
Card
Layout

这似乎是Hibernate中的一个bug。

另一个解决方案是使用@Table

例如:

@表(name=“PERSON”)

当我有两个类代表两个实体(@Entity)时,这种情况就发生了,如下所示:

@Entity
@Table(name="USER")
public class User {...}
@实体 公共类用户{…}

@实体 公共类用户角色{…}

我通过如下指定表名修复了此错误:

@Entity
@Table(name="USER")
public class User {...}
以及:


非常有趣。自从提出这个问题后,我离开了那家公司,无法确认该软件,我们走了一条持久化路线,但我不能接受ere作为解决方案,所以你的发现有助于这个问题的思路。非常感谢。