我是hibernate的新手,并在hibernate中尝试基本的东西。 我正在使用hibernate 5.0.2和PostgreSQL 9.3 我得到的错误如下
INFO: HHH000228: Running hbm2ddl schema update
Exception in thread "main" org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [create schema user]
at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:59)
at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:420)
at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:409)
....
....
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "user"
这是我的POJO:
package com.temp.ims.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(schema="user")
public class User {
@Id
private int id;
private String name;
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我使用了以下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 name="TestSessionFactory">
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.password">admin</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5433/xyzdb</property>
<property name="hibernate.connection.username">admin</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.pool_size">5</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
以下是获取SessionFactory的代码:
standardServiceRegistry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
metadata = new metadataSources(standardServiceRegistry).addAnnotatedClass(User.class).addAnnotatedClassName("com.temp.ims.model.User").getMetadataBuilder() .applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE)
.build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
请提供解决上述错误的解决方案。
答案 0 :(得分:2)
&#34;用户&#34;在postgres中是一个保留字,所以你不能使用它。使用原始DDL可以将其括在引号中,但使用Hibernate可能更容易重命名表