当前位置: 首页 > 面试题库 >

Hibernate为什么不为MySQL创建数据库?

章盛
2023-03-14
问题内容

我有以下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>

        <property name="connection.url">jdbc:mysql://localhost:3306/userdb</property>
        <property name="connection.username">root</property>
        <property name="connection.password">1234</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <property name="show_sql">true</property>

        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
        <property name="connection.pool_size">1</property>
        <property name="current_session_context_class">thread</property>

        <mapping class="com.beingjavaguys.hbn.User" />

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

我尝试了另一种方言(org.hibernate.dialect.MySQLDialect),但结果却很旧

pom.xml:

...
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>4.0.1.Final</version>
            <classifier>tests</classifier>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.27</version>
        </dependency>
        </dependencies>
</project>

当调用以下代码行时:

    return new Configuration().configure().buildSessionFactory();

我看到以下堆栈跟踪:

ERROR: HHH000231: Schema export unsuccessful
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'userdb'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    ...
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51)
    at org.hibernate.tool.hbm2ddl.DatabaseExporter.<init>(DatabaseExporter.java:52)
    at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:368)
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:305)
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:294)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:452)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
    at com.beingjavaguys.hbn.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
    at com.beingjavaguys.hbn.HibernateUtil.<clinit>(HibernateUtil.java:12)
    at com.beingjavaguys.hbn.App.saveUser(App.java:45)
    at com.beingjavaguys.hbn.App.main(App.java:30)

这个问题的原因是什么?

如何解决?

聚苯乙烯

数据库架构在MySql中不存在!

如果我明确添加数据库shema-一切正常。

从Java应用程序创建架构的方法在哪里?


问题答案:

我通常在使用Spring时使用属性文件自动创建数据库,以下是它的完成方式,希望它能起作用,因此您将对其进行修改以适合您的需求.....

database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/userdb?createDatabaseIfNotExist=true
database.user=root
database.password=root
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create


 类似资料:
  • 问题内容: 在这里记录此信息是因为我只花了一个小时试图解决这个问题。 我有一个实体Foo,拥有: Hibernate为什么不在foo.bar-> bar.id上创建外键约束? 问题答案: 这是因为MySQL在使用ENGINE = MyISAM创建的表上不支持外键约束。您需要使用ENGINE = InnoDB创建(均为!)表。您可以通过调整,添加默认值或在JDBC URL中使用特殊变量来执行此操作:

  • 目标:我尝试使用Java数据库连接器(JDBC)教程。我目前正处于这一步。 错误:在我有JDBC教程的目录中使用shell,我输入,并得到以下错误: buildfile:/users/adam/desktop/jdbctutorial/build.xml

  • 问题内容: 为什么hibernate对这些类使用联接表? 我既不需要联接表也不需要双向关联:( 问题答案: 因为这是它的设计方式,也是JPA规范要求它映射这样的关联的方式。如果要在广告投放表中添加联接列,请使用 这是有据可查的。

  • 我有三个DBs,其中hibernate只能创建2/3。有人能解释一下为什么hibernate不能创建第三个表“商品”吗 1: 组织。冬眠工具架构。spi。CommandAcceptanceException:通过JDBC语句执行DDL“create table GOODES(ID integer not null,brand varchar(255),desc varchar(255),model

  • 我正在尝试使用python和MySQL开发药房管理系统。但我在连接数据库时遇到了问题。 下面是一些代码:

  • 问题内容: 对于一个宠物项目,数据库进入了顶峰, 元数据 达到了顶峰,我很难理解该命令与MySQL命令之间的区别(如果有)。 有什么区别吗?如果不是这样,这是关系数据库行为的一种相当典型的模式(我听说过,对于其他数据库(例如Oracle),模式存在于数据库中,而不是与数据库处于同一级别)。 谢谢! 问题答案: MySQL的文档说: CREATE DATABASE创建具有给定名称的数据库。要使用此语