我经常使用java.lang.Integer作为主键。在这里你可以看到一些代码
@Entity
private class Person {
private Integer id;
@Id
@Column(precision=8, nullable=false)
public Integer getId() {
}
}
我需要设置其精度属性值等于8 。但是,在导出模式(Oracle)时,它无法按预期工作。
AnnotationConfiguration configuration = new AnnotationConfiguration();
configuration
.addAnnotatedClass(Person.class)
.setProperty(Environment.DIALECT, "org.hibernate.dialect.OracleDialect")
.setProperty(Environment.DRIVER, "oracle.jdbc.driver.OracleDriver");
SchemaExport schema = new SchemaExport(configuration);
schema.setOutputFile("schema.sql");
schema.create(true, false);
schema.sql输出
create table Person (id number(10,0) not null)
我总是得到10 。是否有一些解决方法可以获得8而不是10?
答案 0 :(得分:2)
Javadoc似乎表明参数对于Integer来说根本没有意义。
http://java.sun.com/javaee/5/docs/api/javax/persistence/Column.html#precision%28%29
所以看来hibernate忽略它是正确的,因为你的列类型不是BigDecimal等,只是创建一个包含32位整数的列。
答案 1 :(得分:2)
您可以设置columnDefinition属性。
来自Javadocs:
columnDefinition (可选)生成DDL时使用的SQL片段 对于专栏。
@Entity
private class Person {
private Integer id;
@Id
@Column( columnDefinition="number(8,0)", nullable=false)
public Integer getId() {
}
}