我正在尝试使用模型类中的表来获取数据库,问题在于使用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)))
答案 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';
一个。在资源中添加一个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会创建新的数据库。