Java hibernate.hbm2ddl.auto=";更新;它不起作用。为什么?

Java hibernate.hbm2ddl.auto=";更新;它不起作用。为什么?,java,hibernate,oracle11g,Java,Hibernate,Oracle11g,在实体类中完成更改后,hibernate.hbm2ddl.auto=“update”属性未在表中进行更改 首先,我创建了一个实体,如下所示 @Entity @Table(name="EMPLOYEE_SB") public class Employee { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="EMP_ID") private int empId; @Column(

在实体类中完成更改后,
hibernate.hbm2ddl.auto=“update”
属性未在表中进行更改

首先,我创建了一个实体,如下所示

@Entity
@Table(name="EMPLOYEE_SB")
public class Employee {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="EMP_ID")
    private int empId;

    @Column(name="EMP_NAME")
    private String empName;

    //Getter Setter
}
@Entity
@Table(name="EMPLOYEE_SB")
public class Employee {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="EMP_ID")
    private int empId;

    @Column(name="EMP_NAME")
    private String empName;

    @Column(name="PHONE")
    private String phone;

    // Getter and Setter
}
运行应用程序表创建成功后

Hibernate: create table EMPLOYEE_SB (EMP_ID number(10,0) not null, EMP_NAME varchar2(255 char), primary key (EMP_ID))
现在我在实体类中添加了新字段,如下所示

@Entity
@Table(name="EMPLOYEE_SB")
public class Employee {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="EMP_ID")
    private int empId;

    @Column(name="EMP_NAME")
    private String empName;

    //Getter Setter
}
@Entity
@Table(name="EMPLOYEE_SB")
public class Employee {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="EMP_ID")
    private int empId;

    @Column(name="EMP_NAME")
    private String empName;

    @Column(name="PHONE")
    private String phone;

    // Getter and Setter
}
这次应用程序抛出一个异常

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:524)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273)
    at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:203)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445)
    at com.hibernate.app.HibernateUtil.getSessionFactory(HibernateUtil.java:57)
    at com.hibernate.app.MainTestApp.main(MainTestApp.java:8)
Caused by: java.sql.SQLException: ORA-00955: name is already used by an existing object

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210)
    at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:961)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190)
    at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1726)
    at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1696)
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
    ... 12 more
org.hibernate.tool.schema.spi.CommandAcceptanceException:通过JDBC语句执行DDL时出错
位于org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:524)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273)
位于org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:203)
位于org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110)
位于org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
位于org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
位于org.hibernate.internal.sessionfactorympl。(sessionfactorympl.java:309)
位于org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445)
位于com.hibernate.app.HibernateUtil.getSessionFactory(HibernateUtil.java:57)
位于com.hibernate.app.MainTestApp.main(MainTestApp.java:8)
原因:java.sql.SQLException:ORA-00955:名称已被现有对象使用
位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
位于oracle.jdbc.driver.t4cttiore.processError(t4cttiore.java:331)
位于oracle.jdbc.driver.t4cttiore.processError(t4cttiore.java:288)
位于oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
位于oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210)
位于oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:961)
在oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190)中
位于oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1726)
在oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1696)中
位于org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
... 还有12个

您的问题似乎与以下方面有关。不要休眠
Hibernate.hbm2ddl.auto
选项,该选项显然正在按预期工作。日志中是否有在此异常之前的Hibernate语句?@veljkost这里是Hibernate:create table EMPLOYEE_SB(EMP_ID number(10,0)Not null,EMP_NAME varchar2(255 char),PHONE varchar2(255 char),primary key(EMP_ID))1月24日,2017 12:44:26 PM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException警告:GenerationTarget遇到异常接受命令:通过JDBC语句org.hibernate.tool.schema.spi.CommandAcceptanceException执行DDL时出错未创建更新脚本,正如医生们所建议的那样。相反,它创建了一个新的CREATE表,该表显然已经存在。。也许您应该尝试
createdrop
选项进行开发。当然,你也可以试试像
liquibase
flyway
这样的工具。不,我从stacktrace中看到你是独立运行的。问题应该在其他地方。您的问题看起来与。不要休眠
Hibernate.hbm2ddl.auto
选项,该选项显然正在按预期工作。日志中是否有在此异常之前的Hibernate语句?@veljkost这里是Hibernate:create table EMPLOYEE_SB(EMP_ID number(10,0)Not null,EMP_NAME varchar2(255 char),PHONE varchar2(255 char),primary key(EMP_ID))1月24日,2017 12:44:26 PM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException警告:GenerationTarget遇到异常接受命令:通过JDBC语句org.hibernate.tool.schema.spi.CommandAcceptanceException执行DDL时出错未创建更新脚本,正如医生们所建议的那样。相反,它创建了一个新的CREATE表,该表显然已经存在。。也许您应该尝试
createdrop
选项进行开发。当然,你也可以试试像
liquibase
flyway
这样的工具。不,我从stacktrace中看到你是独立运行的。问题应该在别处。