2016-10-16 21 views
0

私は休止状態で新しいです、私は多くの関連付けを使用してアプリケーションを行いました、それは最初にそれが言ったときに例外をスロー:JDBCステートメント、 gestion.cat_prod 'は存在しません。 cat_prodカテゴリテーブル間のジョイントテーブル。 ここに私のコード:
Categorrie.javaHibernateの多くの例外を初めてスロー例外

package dao; 

import java.util.Date; 
import java.util.HashSet; 
import java.util.Set; 

public class Categorie { 

    private Long idCategorie; 
    private String titre; 
    private String description; 
    private Date dateAjout; 
    private Set<Produit> produits= new HashSet<Produit>(); 

    public Set<Produit> getProduits() { 
     return produits; 
    } 
    public void setProduits(Set<Produit> produits) { 
     this.produits = produits; 
    } 
    public Categorie() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public Categorie(Long idCategorie, String titre, String description, Date dateAjout) { 
     super(); 
     this.idCategorie = idCategorie; 
     this.titre = titre; 
     this.description = description; 
     this.dateAjout = dateAjout; 

    } 
    public Long getIdCategorie() { 
     return idCategorie; 
    } 
    public void setIdCategorie(Long idCategorie) { 
     this.idCategorie = idCategorie; 
    } 
    public String getTitre() { 
     return titre; 
    } 
    public void setTitre(String titre) { 
     this.titre = titre; 
    } 
    public String getDescription() { 
     return description; 
    } 
    public void setDescription(String description) { 
     this.description = description; 
    } 
    public Date getDateAjout() { 
     return dateAjout; 
    } 
    public void setDateAjout(Date dateAjout) { 
     this.dateAjout = dateAjout; 
    } 

} 

Produit.java

package dao; 

import java.util.HashSet; 
import java.util.Set; 

public class Produit { 

    private Long idProduit; 
    private String nom; 
    private String description; 
    private Double prix; 
    private Set <Categorie> categories=new HashSet(); 


     // TODO Auto-generated constructor stub 


    public Produit(String nom, String description, Double prix) { 
     super(); 
     this.nom = nom; 
     this.description = description; 
     this.prix = prix; 
    } 

    public Produit() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public Set<Categorie> getCategories() { 
     return categories; 
    } 

    public void setCategories(Set<Categorie> categories) { 
     this.categories = categories; 
    } 

    public Long getIdProduit() { 
     return idProduit; 
    } 
    public void setIdProduit(Long idProduit) { 
     this.idProduit = idProduit; 
    } 
    public String getNom() { 
     return nom; 
    } 
    public void setNom(String nom) { 
     this.nom = nom; 
    } 
    public String getDescription() { 
     return description; 
    } 
    public void setDescription(String description) { 
     this.description = description; 
    } 
    public Double getPrix() { 
     return prix; 
    } 
    public void setPrix(Double prix) { 
     this.prix = prix; 
    } 


} 

HibernateUtil.java

package dao; 



import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class HibernateUtil { 
    private static final SessionFactory sessionFactory; 
    static { 
     try { 
      // Create the SessionFactory from hibernate.cfg.xml 
      sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory(); 
     } catch (Throwable ex) { 
      // Make sure you log the exception, as it might be swallowed 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 

Categorie.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate MApping DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
<class name="dao.Categorie" table="CATEGORIE"> 
    <id name="idCategorie" column="ID_CATEGORIE"> 
    <generator class="native"></generator> 
    </id> 
    <property name="titre" column="TITRE"></property> 
    <property name="description" column="DESCRIPTION"></property> 
    <property name="dateAjout" column="DATE_AJOUT"></property> 

    <set name="produits" table="CAT_PROD" > 
     <key column="ID_CATEGORIE" ></key> 
     <many-to-many class="dao.Produit" column="ID_PRODUIT"></many-to-many> 
    </set> 
</class> 

</hibernate-mapping> 

Produit.xbm.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate MApping DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
<class name="dao.Produit" table="PRODUIT"> 
    <id name="idProduit" column="ID_PRODUIT"> 
    <generator class="native"></generator> 
    </id> 
    <property name="nom" column="NOM"></property> 
    <property name="description" column="DESCRIPTION"></property> 
    <property name="prix" column="PRIX"></property> 

    <set name="categories" table="CAT_PROD" > 
    <key column="ID_PRODUIT"></key> 
    <many-to-many column="ID_CATEGORIE" class="dao.Categorie" > </many-to-many> 
    </set> 
</class> 

</hibernate-mapping> 

hibernate.cfg.xmlの

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
     <!-- Database connection settings --> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="connection.url">jdbc:mysql://localhost:3306/gestion</property> 
     <property name="connection.username">root</property> 
     <property name="connection.password"></property> 

     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">1</property> 

     <!-- SQL dialect --> 
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

     <property name="hibernate.current_session_context_class">thread</property> 

     <!-- Disable the second-level cache --> 
     <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

     <!-- Echo all executed SQL to stdout --> 
     <property name="show_sql">true</property> 

     <!-- Drop the existing tables and create new one --> 
     <property name="hbm2ddl.auto">create</property> 

     <!-- Mention here all the model classes along with their package name --> 
     <mapping resource="dao/Produit.hbm.xml"/> 
     <mapping resource="dao/Categorie.hbm.xml"/> 


    </session-factory> 
</hibernate-configuration> 

これは、ログです:私は、mは任意の助け

bonjour 
Oct 16, 2016 4:23:10 PM org.hibernate.Version logVersion 
INFO: HHH000412: Hibernate Core {5.2.3.Final} 
Oct 16, 2016 4:23:10 PM org.hibernate.cfg.Environment <clinit> 
INFO: HHH000206: hibernate.properties not found 
Oct 16, 2016 4:23:10 PM org.hibernate.cfg.Environment buildBytecodeProvider 
INFO: HHH000021: Bytecode provider name : javassist 
Oct 16, 2016 4:23:10 PM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity 
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-configuration. Use namespace http://www.hibernate.org/dtd/hibernate-configuration instead. Support for obsolete DTD/XSD namespaces may be removed at any time. 
Oct 16, 2016 4:23:11 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> 
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 
Oct 16, 2016 4:23:11 PM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity 
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-mapping. Use namespace http://www.hibernate.org/dtd/hibernate-mapping instead. Support for obsolete DTD/XSD namespaces may be removed at any time. 
Oct 16, 2016 4:23:12 PM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity 
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-mapping. Use namespace http://www.hibernate.org/dtd/hibernate-mapping instead. Support for obsolete DTD/XSD namespaces may be removed at any time. 
Oct 16, 2016 4:23:12 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) 
Oct 16, 2016 4:23:12 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/gestion] 
Oct 16, 2016 4:23:12 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH10001001: Connection properties: {user=root, password=****} 
Oct 16, 2016 4:23:12 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH10001003: Autocommit mode: false 
Oct 16, 2016 4:23:12 PM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init> 
INFO: HHH000115: Hibernate connection pool size: 1 (min=1) 
Sun Oct 16 16:23:13 EDT 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. 
Oct 16, 2016 4:23:13 PM org.hibernate.dialect.Dialect <init> 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
Hibernate: alter table CAT_PROD drop foreign key FK7s1f1o7oqk6wwmk7pytsxaqap 
Oct 16, 2016 4:23:14 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection 
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.[email protected]4b6166aa] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. 
Oct 16, 2016 4:23:14 PM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException 
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement 
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:374) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:359) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.applyConstraintDropping(SchemaDropperImpl.java:331) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:230) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:154) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:126) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:112) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:138) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:66) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:493) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726) 
    at dao.HibernateUtil.<clinit>(HibernateUtil.java:13) 
    at uti.Services.addProduit(Services.java:12) 
    at Test.main(Test.java:18) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gestion.cat_prod' doesn't exist 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.Util.getInstance(Util.java:408) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2677) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503) 
    at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:839) 
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:739) 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) 
    ... 16 more 

Hibernate: alter table CAT_PROD drop foreign key FK8820f0c5vl0w4qbdxro21vhsu 
Oct 16, 2016 4:23:14 PM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException 
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement 
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:374) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:359) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.applyConstraintDropping(SchemaDropperImpl.java:331) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:230) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:154) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:126) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:112) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:138) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:66) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:493) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726) 
    at dao.HibernateUtil.<clinit>(HibernateUtil.java:13) 
    at uti.Services.addProduit(Services.java:12) 
    at Test.main(Test.java:18) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gestion.cat_prod' doesn't exist 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.Util.getInstance(Util.java:408) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2677) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503) 
    at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:839) 
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:739) 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) 
    ... 16 more 

Hibernate: drop table if exists CAT_PROD 
Hibernate: drop table if exists CATEGORIE 
Hibernate: drop table if exists PRODUIT 
Hibernate: create table CAT_PROD (ID_PRODUIT bigint not null, ID_CATEGORIE bigint not null, primary key (ID_CATEGORIE, ID_PRODUIT)) 
Oct 16, 2016 4:23:14 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection 
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.[email protected]32fe9d0a] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. 
Hibernate: create table CATEGORIE (ID_CATEGORIE bigint not null auto_increment, TITRE varchar(255), DESCRIPTION varchar(255), DATE_AJOUT datetime, primary key (ID_CATEGORIE)) 
Hibernate: create table PRODUIT (ID_PRODUIT bigint not null auto_increment, NOM varchar(255), DESCRIPTION varchar(255), PRIX double precision, primary key (ID_PRODUIT)) 
Hibernate: alter table CAT_PROD add constraint FK7s1f1o7oqk6wwmk7pytsxaqap foreign key (ID_CATEGORIE) references CATEGORIE (ID_CATEGORIE) 
Hibernate: alter table CAT_PROD add constraint FK8820f0c5vl0w4qbdxro21vhsu foreign key (ID_PRODUIT) references PRODUIT (ID_PRODUIT) 
Oct 16, 2016 4:23:14 PM org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources 
INFO: HHH000476: Executing import script 'org.hiber[email protected]32057e6' 
Hibernate: insert into PRODUIT (NOM, DESCRIPTION, PRIX) values (?, ?, ?) 

おかげで2日間吸います。

+0

アプリケーションを2回実行すると、例外がスローされません。あなたの答えに感謝します。 –

答えて

0

あなたは以下のような設定を使用する理由私にはわからない:

<property name="hbm2ddl.auto">create</property> 

この構成では、新しいテーブルを作成し、Hibernateはまず、既存の表を削除していることを示します。テーブルが存在しない場合は例外をスローします。まだcat_prodテーブルを作成していないようです。ここでは、このエラーが初めて発生する理由を示します。

ソリューション、次のようにするために、上記の設定を変更:テーブルのチェックを休止そして

<property name="hbm2ddl.auto">update</property> 

を。テーブルが存在しない場合、新しいテーブルが作成されます

このヘルプが必要です。