Java Hibernate没有在给定架构的PostgreSQL中创建表

Java Hibernate没有在给定架构的PostgreSQL中创建表,java,postgresql,hibernate,Java,Postgresql,Hibernate,我使用PostgreSQL并创建了名为hib的表和模式。当我在数据库中创建外来表并运行应用程序时,它成功地将数据持久化到数据库中。但如果数据库中没有该表,那么Hibernate就不会在hib模式中创建表,我认为Hibernate不会读取Hibernate.cfg.xml中提到的hdm2ddl.auto属性。根据日志,它不提供创建或更新表之类的日志(如果存在)。它直接尝试插入值。 尝试了许多方法,但它不像创建、更新、创建和删除那样工作。 每次都出现相同的错误:关系“hib.alien”不存在。 这

我使用PostgreSQL并创建了名为hib的表和模式。当我在数据库中创建外来表并运行应用程序时,它成功地将数据持久化到数据库中。但如果数据库中没有该表,那么Hibernate就不会在hib模式中创建表,我认为Hibernate不会读取Hibernate.cfg.xml中提到的hdm2ddl.auto属性。根据日志,它不提供创建或更新表之类的日志(如果存在)。它直接尝试插入值。 尝试了许多方法,但它不像创建、更新、创建和删除那样工作。 每次都出现相同的错误:关系“hib.alien”不存在。 这里是持久类

@Entity()
@Table(name="hib.alien")
public class Alien {
    @Id
    private int aid;
    private String aname;
    private String acolor;

    public Alien() {}

    public Alien(int aid, String aname, String acolor) {
        this.aid = aid;
        this.aname = aname;;
        this.acolor = acolor;
    }

    public int getAid() {
        return aid;
    }

    public void setAid(int aid) {
        this.aid = aid;
    }

    public String getAname() {
        return aname;
    }

    public void setAname(String aname) {
        this.aname = aname;
    }

    public String getAcolor() {
        return acolor;
    }

    public void setAcolor(String acolor) {
        this.acolor = acolor;
    }

    @Override
    public String toString() {
        return "Alien [aid=" + aid + ", aname=" + aname + ", acolor=" + acolor + "]";
    }
}
hibernate.cfg.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hbm2ddl.auto">update</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/hib</property>
        <property name="hibernate.connection.username">postgres</property>
        <property name="hibernate.connection.password">123</property>
        <property name="show_sql">true</property>
    </session-factory>
</hibernate-configuration>
以下是日志:

INFO: HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
Mar 03, 2019 10:28:08 AM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate: insert into hib.alien (acolor, aname, aid) values (?, ?, ?)
Mar 03, 2019 10:28:09 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 42P01
Mar 03, 2019 10:28:09 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ERROR: relation "hib.alien" does not exist
  Position: 13
Mar 03, 2019 10:28:09 AM org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure
ERROR: HHH000346: Error during managed flush [org.hibernate.exception.SQLGrammarException: could not execute statement]
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement

对于PostgreSQL,实体应该如下所示,这样表将创建 在这个模式中

 @Entity()
 @Table(name = "alien"  schema = "\"hib\"")
 public class Alien {
    @Id
    private int aid;
    public int getAid() {
        return aid;
    }
    public void setAid(int aid) {
        this.aid = aid;
    }
  }

创建
。update->will not create tables for you即使create也不能像我说的那样工作,这可能是因为表名的缘故。将
@Table(name=“hib.alien”)
更改为
@Table(name=“alien”)
,并在
hibernate.cfg.xml
中设置默认模式,确保模式存在于DB编译时错误中。它表示必须为元素类型属性@kid101声明属性值。这必须放在
会话工厂
标记中。另外,我开始觉得您没有一个模式作为
hib
,但是您的DB名称是
hib
,并且您使用的是公共模式->如果是这种情况,那么只需从表名中删除
hib.
,并设置
hdm2ddl.auto
->create
 @Entity()
 @Table(name = "alien"  schema = "\"hib\"")
 public class Alien {
    @Id
    private int aid;
    public int getAid() {
        return aid;
    }
    public void setAid(int aid) {
        this.aid = aid;
    }
  }