无法创建hibernate hbm2ddl设置为更新的表。

无法创建hibernate hbm2ddl设置为更新的表。,hibernate,Hibernate,我是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

我是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>
请提供解决上述错误的解决方案。

用户是postgres中的保留字,因此您不能使用它。使用原始DDL可以将其括在引号中,但使用Hibernate可能更容易重命名表

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