Java @Column columnDefinition使哪些属性成为冗余?
我经常这样指定我的Java @Column columnDefinition使哪些属性成为冗余?,java,hibernate,jpa,Java,Hibernate,Jpa,我经常这样指定我的@列注释: @Column(columnDefinition="character varying (100) not null",length=100,nullable=false) 如您所见,我指定了length和nullable,即使columnDefinition已经指定了它们。那是因为我不知道在哪里/什么时候确切地使用这些值 那么,在指定列定义时,@Column的哪些其他属性是多余的 如果重要的话,我使用Hibernate和PostgreSQL列定义将覆盖Hiber
@列
注释:
@Column(columnDefinition="character varying (100) not null",length=100,nullable=false)
如您所见,我指定了length
和nullable
,即使columnDefinition
已经指定了它们。那是因为我不知道在哪里/什么时候确切地使用这些值
那么,在指定列定义
时,@Column
的哪些其他属性是多余的
如果重要的话,我使用Hibernate和PostgreSQL列定义将覆盖Hibernate为此特定列生成的sql DDL,它是不可移植的,并且取决于您使用的数据库。您可以使用它来指定可为空、长度、精度、比例。。。等等。我的回答:以下所有内容都应该被覆盖(即在
列定义中描述它们,如果合适):
长度
精度
比例
nullable
unique
name
+columndefinition
和其他内容
理由如下
@Basic(…,optional=true)
设置,一次通过@Column(…,nullable=true)
。前者表示,在刷新时,JPA对象模型(内存中)中的属性/关联可以为null;后者表示DB列可以为null。通常,您希望将它们设置为相同的,但并非总是如此,这取决于DB表的设置和重用方式那么,在指定columnDefinition时,@Column的哪些其他属性是多余的?
定义: 为列生成DDL时使用的SQL片段。列定义
默认值: 生成SQL以创建推断类型的列。列定义
- 提供了以下示例:
@Column(name="DESC", columnDefinition="CLOB NOT NULL", table="EMP_DETAIL") @Column(name="EMP_PIC", columnDefinition="BLOB NOT NULL")
- 而且,呃…,真的是这样。:-$
&名称
可与表格
结合使用,两者均不被覆盖列定义
被nullable
columnDefinition
,长度
,精度
被比例
覆盖/冗余-它们是类型的组成部分列定义
和可插入的
是单独提供的,从不包含在可更新的
列定义中,因为它们在将SQL写入数据库之前控制内存中的SQL生成。
唯一的
”属性。它类似于nullable-扩展/限定类型定义,因此应该被视为类型定义的一部分。i、 e.应被覆盖测试我的答案 对于“A”列和“B”列,分别:
@Column(name="...", table="...", insertable=true, updateable=false,
columndefinition="NUMBER(5,2) NOT NULL UNIQUE"
@Column(name="...", table="...", insertable=false, updateable=true,
columndefinition="NVARCHAR2(100) NULL"
- 确认生成的表具有正确的类型/可空性/唯一性
- 或者,JPA是否插入和更新:前者应包括A列,后者应包括B列
长度
,可为空
等)是否通常使用?根据javax.persistence.Column
的源代码,属性:unique
,nullable
,columnDefinition
,length
,precision
,scale
仅用于DDL生成,属性:name
,table
用于指定列n映射和属性:insertable
,updateable
用于指定该列是否包含在持久性提供程序生成的SQL INSERT/UPDATE语句中。当该列已存在于数据库中且具有varchar(100)且我希望将其设为varchar(255)时,此注释是否有效?