简体   繁体   English

创建EntityManagerFactory时,Hibernate会继续删除/创建表

[英]Hibernate keeps dropping/creating tables when EntityManagerFactory is created

I am using JPA for Hibernate. 我正在将JPA用于Hibernate。 In one of my service method where records will be inserted. 在我的服务方法之一中,将插入记录。 I have the following line to initiate EntityManger: 我有以下代码行来启动EntityManger:

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

When I was debugging the code, I notice Hibernate doing weird things while executing Persistence.createEntityManagerFactory. 当我调试代码时,我注意到Hibernate在执行Persistence.createEntityManagerFactory时做了奇怪的事情。 The output is as belows: 输出如下:

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

I don't understand why it is trying to drop all the tables and create them again. 我不明白为什么它要删除所有表并再次创建它们。 Same thing with the foreign keys. 外键也一样。 The entity classes were generated automatically in Eclipse. 实体类是在Eclipse中自动生成的。

persistence.xml 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>

You must set the hibernate property "hibernate.hbm2ddl.auto" to another value. 您必须将休眠属性“ hibernate.hbm2ddl.auto”设置为另一个值。 Either validate, update, create or create-drop. 验证,更新,创建或创建放置。

A more detailed explanation can be found at Hibernate hbm2ddl.auto possible values and what they do? 可以在Hibernate hbm2ddl.auto上找到更详细的解释。 可能的值及其作用是什么?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Hibernate 不断为我的枚举创建表 - Hibernate keeps creating tables for my enums 从hibernate配置创建EntityManagerFactory - Creating EntityManagerFactory from hibernate Configuration 创建 EntityManagerFactory 时出现 ArrayIndexOutOfBoundsException - ArrayIndexOutOfBoundsException when creating a EntityManagerFactory 创建EntityManagerFactory Bean时发生IllegalStateException - IllegalStateException when creating EntityManagerFactory Bean 应该何时创建/打开EntityManagerFactory实例? - When should EntityManagerFactory instance be created/opened? Hibernate:新的 Session 不掉表 - Hibernate: New Session without dropping the tables 使用Hibernate 5.2.13.Final创建名为&#39;entityManagerFactory&#39;的bean时出错 - Error creating bean with name 'entityManagerFactory' with Hibernate 5.2.13.Final SpringBoot JPA Hibernate:创建名称为&#39;entityManagerFactory&#39;的bean时出错 - SpringBoot JPA Hibernate: Error creating bean with name 'entityManagerFactory' Spring Boot +休眠Envers。 创建名称为&#39;entityManagerFactory&#39;的bean时出错 - Spring Boot + Hibernate Envers. Error creating bean with name 'entityManagerFactory' 当 entityManagerFactory 未命名为“entityManagerFactory”时 - When entityManagerFactory is not named "entityManagerFactory"
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM