Java HibernateXML配置似乎不起作用

Java HibernateXML配置似乎不起作用,java,hibernate,Java,Hibernate,我正在学习hibernate,并尝试进行xml配置,但这似乎不起作用 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-configuratio

我正在学习hibernate,并尝试进行xml配置,但这似乎不起作用

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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.password">87654321</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/protein_tracker</property>

  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.default_schema">protein_tracker</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.show_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">create</property>
  <mapping resource="com/andrei/User.hbm.xml"/>
 </session-factory>
</hibernate-configuration>
如果我从用户类中取消注释
@Table
注释,应用程序将查找正确的(users)表。为什么xml配置不起作用

下面您可以看到hibernate助手类和我的main()

HibernateUtilities.java

public class HibernateUtilities {

private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;

static {
    try {
        Configuration conf = new Configuration().configure();
        conf.addAnnotatedClass(com.andrei.User.class);
        conf.configure();

        serviceRegistry = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
        sessionFactory = conf.buildSessionFactory(serviceRegistry);
    } catch (HibernateException e) {
        System.out.println("problem creating session factory: " + e);
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}
}
public static void main(String[] args) {
    Session session = HibernateUtilities.getSessionFactory().openSession();
    session.beginTransaction();

    User user = new User();
    user.setName("first name");
    user.setGoal(250);

    session.save(user);

    session.getTransaction().commit();
    session.close();
    HibernateUtilities.getSessionFactory().close();

}
Main.java

public class HibernateUtilities {

private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;

static {
    try {
        Configuration conf = new Configuration().configure();
        conf.addAnnotatedClass(com.andrei.User.class);
        conf.configure();

        serviceRegistry = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
        sessionFactory = conf.buildSessionFactory(serviceRegistry);
    } catch (HibernateException e) {
        System.out.println("problem creating session factory: " + e);
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}
}
public static void main(String[] args) {
    Session session = HibernateUtilities.getSessionFactory().openSession();
    session.beginTransaction();

    User user = new User();
    user.setName("first name");
    user.setGoal(250);

    session.save(user);

    session.getTransaction().commit();
    session.close();
    HibernateUtilities.getSessionFactory().close();

}
以下是我的问题

  • 为什么xml配置不起作用?user.hbm.xml中指定的表名是users,但应用程序查找表user
  • 为什么
    create
    不起作用
  • 这是我的日志:

    Hibernate:删除表(如果存在)用户2017年12月26日下午4:55:42 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection信息:HHH10001501:从获取的连接 JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.jdbc环境启动器$ConnectionProviderJdbcConnectionAccess@4612b856] 对于(非JTA),DDL执行未处于自动提交模式;这个 将提交“本地事务”连接,并且 将设置为自动提交模式。Hibernate:创建表用户(id 整数不为空,目标整数不为空,名称为varchar(255),总计 整数不为空,主键(id))类型=MyISAM Dec 26,2017 4:55:42 颗粒物 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection信息:HHH10001501:从获取的连接 JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.jdbc环境启动器$ConnectionProviderJdbcConnectionAccess@74eb909f] 对于(非JTA),DDL执行未处于自动提交模式;这个 将提交“本地事务”连接,并且 将设置为自动提交模式。2017年12月26日下午4:55:42 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException警告:GenerationTarget遇到异常接受 命令:通过JDBC语句执行DDL时出错 org.hibernate.tool.schema.spi.CommandAcceptanceException:错误 在以下位置通过JDBC语句执行DDL org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) 在 org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440) 在 org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) 在 org.hibernate.tool.schema.internal.SchemaCreateFromMetadata(schemaCreateOrImpl.java:315) 在 org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166) 在 org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135) 在 org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121) 在 org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:155) 在 org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) 在 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:313) 在 org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:452) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710) 在com.andrei.HibernateUtilities。(HibernateUtilities.java:21) 在com.andrei.Program.main(Program.java:8)上,由以下原因引起: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您有一个 SQL语法错误;检查与您的产品相对应的手册 MySQL服务器版本,以便在 第1行在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:423) 位于com.mysql.jdbc.Util.handleNewInstance(Util.java:425) com.mysql.jdbc.Util.getInstance(Util.java:408)位于 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)位于 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)位于 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)位于 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)位于 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)位于 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2480)位于 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2438)位于 com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:845) 在com.mysql.jdbc.statementinpl.execute(statementinpl.java:745)上 org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 还有13个

    2017年12月26日下午4:55:42 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources信息:HH000476:正在执行导入脚本 'org.hibernate.tool.schema.internal.exec。ScriptSourceInputNonExistentImpl@2826f61' Hibernate:在用户(目标、名称、总数、id)中插入值(?、、、?, ?)2017年12月26日下午4:55:42 org.hibernate.engine.jdbc.spi.SqlExceptionHelper日志异常警告: SQL错误:1146,SQLState:42S02 2017年12月26日下午4:55:42 org.hibernate.engine.jdbc.spi.SqlExceptionHelper日志异常错误: 表'protein_tracker.users'不存在2017年12月26日下午4:55:42 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl发行版 信息:HH000010:在批处理发布时,它仍然包含JDBC 声明2017年12月26日下午4:55:42 org.hibernate.internal.exceptionApperstandardimpl mapManagedFlushFai
    Hibernate: create table users (id integer not null, goal integer not null, name varchar(255), total integer not null, primary key (id)) type=MyISAM
    
    Configuration cfg = new Configuration()
        .addClass(com.andrei.User.class)
    
    conf.addAnnotatedClass(com.andrei.User.class);