@column java_java – 什么属性@Column columnDefinition多余?

我的答案:所有以下内容都应该被覆盖(如果适用的话,在列定义中描述它们):

>长度

>精度

>规模

>可空

>独特

即列DDL将由以下内容组成:name columndefinition,而没有别的。

理由如下。

>包含单词“Column”或“Table”的注释是纯物理属性,仅用于根据数据库控制DDL / DML。

>其他注释纯逻辑 – 在java中使用内存中的属性来控制JPA处理。

这就是为什么有时候看来,可选性/可空性设置两次 – 一次通过@Basic(…,可选= true),一次通过@Column(…,nullable = true)。前面说的属性/关联可以在JPA对象模型(内存中)为空,在冲洗时间;后者表示DB列可以为空。通常你会希望他们设置相同 – 但不总是,这取决于DB表的设置和重用。

在您的示例中,长度和可空属性被覆盖和冗余。

So, when specifying columnDefinition, what other properties of @Column are made redundant?

>在JPA Spec& javadoc:

> columnDefinition定义:

生成列的DDL时使用的SQL片段。

> columnDefinition默认值:

生成的SQL以创建推断类型的列。

>提供以下示例:

@Column(name="DESC", columnDefinition="CLOB NOT NULL", table="EMP_DETAIL")

@Column(name="EMP_PIC", columnDefinition="BLOB NOT NULL")

>而且,是的,这是真的。 : – $?

columnDefinition是否会覆盖相同注释中提供的其他属性?

javadoc和JPA规范没有明确地解决这个规范没有给予很大的保护。要百分之百地确定,测试您选择的实施。

> JPA规范中提供的示例可以安全地隐含以下内容

>名称&表可以与columnDefinition一起使用,也不能被覆盖

> nullable被columnDefinition覆盖/冗余

>以下可以从“情境的逻辑”中相当安全地隐含(我只是说:? – P):

> length,precision,scale由columnDefinition重写或冗余,它们是类型的一部分

可插入和可更新是单独提供的,并且从未包含在columnDefinition中,因为它们在将数据发送到数据库之前控制内存中的SQL生成。

>只留下“独一无二”的财产。它类似于可空的 – 扩展/限定类型定义,因此应该对类型定义进行整体处理。即应该被覆盖。

测试我的答案

列“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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值