Hibernate不会从模型到数据库生成表

时间:2015-03-30 10:49:01

标签: java hibernate maven jboss7.x hibernate-mapping

我正在尝试使用模型类中的表来获取数据库,问题在于使用Hibernate注释自动生成表。

我有一个maven models projet nammed models-test ,其中我有以下课程:

@Audited
@Entity
@Table(name = "test_EXTEND", schema = "COTest")
public class ComaTest implements Serializable {

private static final long serialVersionUID = 393765467600954104L;

@Id
@Column(name = "CL_o_CODE")
private Integer id;
@Column(name = "CL_o_NUM01")
private Long refCountryCode;
@Column(name = "CL_o_STR01")
private String city;
@Column(name = "CL_o_STR02")
private String zipCode;

public Integer getId() {
    return this.id;
}

public void setId(final Integer idVal) {
    this.id = idVal;
}

public Long getRefCountryCode() {
    return this.refCountryCode;
}
public void setRefCountryCode(final Long refCountryCode) {
    this.refCountryCode = refCountryCode;
}
public String getCity() {
    return this.city;
}
public void setCity(final String cityVal) {
    this.city = cityVal;
}
public String getZipCode() {
    return this.zipCode;
}
public void setZipCode(final String zipCodeVal) {
    this.zipCode = zipCodeVal;
}
}

我有一个其他项目nammed interface_test,我有我所有的接口,然后我有第三个maven projet nammed服务测试我在persistence.xml文件中做了:

<persistence-unit name="op_PU">
<jta-data-source>java:jboss/datasources/op_DS</jta-data-source>
<properties>            
        <property name="hibernate.show_sql" value="false" />            
        <property name="hibernate.hbm2ddl.auto" value="update" />

        <property name="org.hibernate.envers.audit_table_suffix"
            value="_aud" />
        <property name="org.hibernate.envers.revision_field_name"
            value="rev" />
        <property name="org.hibernate.envers.revision_type_field_name"
            value="rev_type" />
    </properties>
</persistence-unit>

在jboss服务器的standalone.xml中我有这个连接字符串:

<datasource jndi-name="java:jboss/datasources/op_DS" pool-name="op_DS" enabled="true" use-java-context="true">
                <connection-url>jdbc:sqlserver://localhost;databaseName=OP_DB;</connection-url>
                <driver>sqlserver</driver>
                <security>
                    <user-name>sa</user-name>
                    <password>testpassword</password>
                </security>
</datasource>

在康复中我有:

ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 94) The specified schema name "COTest" either does not exist or you do not have permission to use it.
ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 94) HHH000389: Unsuccessful: create table COTest.test_EXTEND (CL_o_CODE int not null, CL_o_STR01 varchar(255), CL_o_STR02 varchar(255), CL_o_STR03 varchar(255), primary key (CL_o_CODE, rev)))

3 个答案:

答案 0 :(得分:1)

您好我认为您的persistence.xml属性名为hibernate.hbm2ddl.auto存在问题,您已为其提供了更新值,您需要创建或创建drop(如果开发环境)以从模型生成表到数据库。 hibernate.hbm2ddl.auto的可能选项列表是,

validate: validate the schema, makes no changes to the database.
update: update the schema.
create: creates the schema, destroying previous data.
create-drop: drop the schema at the end of the session.

答案 1 :(得分:0)

当我手动在SQL Server 2008 R2上创建架构时,hibernate可以从现有实体中生成表格。 这是关于持久性单元的代码块:

<persistence-unit name="OP_PU">
<jta-data-source>java:jboss/datasources/OP_DS</jta-data-source>
 <properties>
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.hbm2ddl.auto" value="create" />



        <property name="org.hibernate.envers.audit_table_suffix"
            value="_aud" />
        <property name="org.hibernate.envers.revision_field_name"
            value="rev" />
        <property name="org.hibernate.envers.revision_type_field_name"
            value="rev_type" />

    </properties>
</persistence-unit>

但我正在寻找一个解决方案,它可以帮助我自动创建表格,并使用模式名称whitout手动创建模式(在创建表格之前,必须首先创建模式) 有没有解决办法呢?

答案 2 :(得分:0)

看到你的最新帖子后,我认为你必须做一些我们可以在创建表之前创建模式的东西: 1.喜欢将“; INIT = create schema IF NOT EXISTS MYDBNAME”添加到您的数据库URL 例如

database.url=jdbc:DB:USER:;INIT=create schema IF NOT EXISTS MYDBNAME.

您可以选择使用文件路径

将RUNSCRIPT添加到INIT值
database.url=jdbc:DB:USER:;INIT=RUNSCRIPT FROM 'src/create.sql';
  1. 使用休眠,你可以做上面的事情
  2. 一个。在资源中添加一个create.sql文件,其中包含以下内容:

    /*create database at first time*/ 
    create schema IF NOT EXISTS MYDBNAME;
    

    湾并将属性“hbm2ddl.import_files”添加到“hibernate.cfg.xml”中,如下所示:

    <hibernate-configuration>
        <session-factory>   
           <property name="hbm2ddl.import_files">path/create.sql</property>
           other properties
        </session-factory>
    </hibernate-configuration>
    

    因此,如果数据库不存在,hibernate会创建新的数据库。