【问题标题】:Hibernate keeps dropping/creating tables when EntityManagerFactory is created创建 EntityManagerFactory 时,Hibernate 不断删除/创建表
【发布时间】:2016-03-08 17:58:41
【问题描述】:

我正在将 JPA 用于 Hibernate。在我的一种服务方法中,将插入记录。我有以下行来启动 EntityManger:

    EntityManagerFactory factory = Persistence.createEntityManagerFactory("CghubDB");
    EntityManager manager = factory.createEntityManager();
    CghubDao dao = new CghubDao(manager);

当我调试代码时,我注意到 Hibernate 在执行 Persistence.createEntityManagerFactory 时做了一些奇怪的事情。输出如下:

**Mar 08, 2016 11:42:45 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
    name: CghubDB
    ...]
Mar 08, 2016 11:42:45 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.1.0.Final}
Mar 08, 2016 11:42:45 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Mar 08, 2016 11:42:45 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Mar 08, 2016 11:42:45 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
Mar 08, 2016 11:42:45 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Mar 08, 2016 11:42:45 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://mdarisrac02d:3306/pancancer]
Mar 08, 2016 11:42:45 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=dian, password=****}
Mar 08, 2016 11:42:45 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Mar 08, 2016 11:42:45 AM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Mar 08, 2016 11:42:46 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
Mar 08, 2016 11:42:46 AM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl useContextualLobCreation
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
Hibernate: alter table PAIR_TB drop foreign key FK8s20mxutpctn5n8hm9bvg8iyd
Hibernate: alter table SEQ_TB drop foreign key FKkr6f9ff4d9h4pds6cby5ucky0
Hibernate: drop table if exists GROUP_TB
Hibernate: drop table if exists PAIR_TB
Hibernate: drop table if exists SEQ_TB
Hibernate: create table GROUP_TB (ROW_ID integer not null, GROUP_NAME varchar(255), primary key (ROW_ID))
Hibernate: create table PAIR_TB (ROW_ID integer not null, PAIR_CODE varchar(255), GROUP_ID integer, primary key (ROW_ID))
Hibernate: create table SEQ_TB (ROW_ID integer not null, ALIQUOT_ID varchar(255), ANALYSIS_ID varchar(255), ANALYTE_CODE varchar(255), center varchar(255), checksum varchar(255), DATA_URL varchar(255), DCC_PROJECT varchar(255), DCC_SPECIMEN_TYPE varchar(255), DISEASE_ABBR varchar(255), DISEASE_FULL varchar(255), filename varchar(255), filepath varchar(255), filesize integer not null, LAST_MODIFIED datetime, LEGACY_ID varchar(255), PARTICIPANT_ID varchar(255), platform varchar(255), PUBLISHED_DATE datetime, refassem varchar(255), SAMPLE_ID varchar(255), SAMPLE_TYPE varchar(255), SEQ_FORMAT varchar(255), SEQ_SOURCE varchar(255), SPECIMEN_ID varchar(255), study varchar(255), TISSUE_TYPE varchar(255), TSS_ID varchar(255), PAIR_ID integer, primary key (ROW_ID))
Hibernate: alter table PAIR_TB add constraint FK8s20mxutpctn5n8hm9bvg8iyd foreign key (GROUP_ID) references GROUP_TB (ROW_ID)
Hibernate: alter table SEQ_TB add constraint FKkr6f9ff4d9h4pds6cby5ucky0 foreign key (PAIR_ID) references PAIR_TB (ROW_ID)
Mar 08, 2016 11:42:47 AM org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources
INFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@420f11e'
Mar 08, 2016 11:42:47 AM org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
INFO: HHH000397: Using ASTQueryTranslatorFactory**

我不明白为什么它试图删除所有表并重新创建它们。外键也一样。实体类是在 Eclipse 中自动生成的。

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="CghubDB" >
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>org.mdacc.rists.cghub.model.GroupTb</class>
        <class>org.mdacc.rists.cghub.model.PairTb</class>
        <class>org.mdacc.rists.cghub.model.SeqTb</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://risurl:3306/pancancer" />
            <property name="javax.persistence.jdbc.user" value="user" />
            <property name="javax.persistence.jdbc.password" value="pass" />

            <!--Hibernate properties-->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="validate" />
        </properties>
    </persistence-unit>
</persistence>

【问题讨论】:

  • 检查您的持久性单元属性中是否存在与 DDL 生成相关的属性。

标签: java mysql hibernate jpa persistence


【解决方案1】:

您必须将休眠属性“hibernate.hbm2ddl.auto”设置为另一个值。 验证、更新、创建或创建删除。

更详细的解释可以在Hibernate hbm2ddl.auto possible values and what they do?找到

【讨论】:

  • 我在我的 persistence.xml 中更改了要更新和验证的值,然后重新运行程序。仍在删除和创建表格。
  • 你能添加你的persistence.xml文件吗(没有凭据)
  • persistence.xml 添加到原帖中
  • 嗯,您可以尝试为该属性设置 value=""。但这对我来说没有意义。似乎其他人覆盖了该属性。你有休眠配置文件吗?
  • 我以前有一个hibernate.cfg文件,但是我转换为JPA后删除了它。我只是浏览了整个目录,没有 hibernate.cfg 文件。这个 JPA 项目是我的 dao 模块。我正在运行将记录保存在服务模块中的方法。这两个模块都在一个父项目下。这会是一个因素吗?
猜你喜欢
  • 2017-11-30
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2019-06-16
  • 2019-05-24
  • 2021-12-19
相关资源
最近更新 更多