【问题标题】:JPA column default value on start开始时的 JPA 列默认值
【发布时间】:2014-10-06 03:33:54
【问题描述】:

我有一个每天午夜运行的工作,我正在使用 JPA 创建表。我想在每次启动作业时为一列(对于当前数据库中存在的所有行)分配一个默认值,然后在作业期间我将根据某些逻辑为该列分配一个不同的值。

例如:

@Column(name = "delete_YN?")
private String deleteYN = "Y";
//getters setters here

我希望每次我的作业开始时此列都有一个默认值“Y”(上一次运行中插入的每一行在作业开始时的列值应该为“Y”)并且作业分配该值通过某种逻辑将“N”添加到列。最后,我将能够看到哪些行具有 Y 值,哪些行具有此列的 N 值。我这样做正确吗?这可以还是应该使用 columnDefinition 注释? this和columnDefinition注解到底有什么区别?

【问题讨论】:

  • 您希望列名带有“?”在里面?
  • @NeilStockton 不,我不会保留“?”在列名中,但我认为这与我的疑问无关:)
  • @Alok 你解决了这个问题吗?否则请提供更多信息以更好地帮助您。
  • 事实证明,在继续执行其他代码之前,我必须为该列显式地用“Y”值标记所有行。一个简单的更新命令就可以做到这一点。我在原始问题中提到的方法仅在创建新表开始时分配“Y”值。对于所有现有行,它不会使用该列的新值更改表。
  • 你解决了这个问题吗?如果是,你是怎么解决的?

标签: jpa annotations


【解决方案1】:

@ColumncolumnDefinition 的JavaDoc

   /**
     * (Optional) The SQL fragment that is used when
     * generating the DDL for the column.
     * <p> Defaults to the generated SQL to create a
     * column of the inferred type.
     */

您应该使用的列定义是(对于 Oracle)

@Column(name="delete_YN", columnDefinition="varchar2(1) DEFAULT 'Y'`")

但我认为您的方式更好,因为对于 columnDefinition,您将绑定到 db。

我也建议您使用这些链接....link1link2

我希望我已经为您提供了有关您问题的所有答案。

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    相关资源
    最近更新 更多