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);