在 java spring 数据中生成自动递增字段
generate auto-incremented field in java spring data
我需要创建一个自动递增的键(不是主键)以将其用作 spring-data 中的文件名
这是我尝试过的:
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "BODY_FILE")
private long bodyFile;
在 liquibase 中:
- column:
name: BODY_FILE
type: BIGINT
autoIncrement: true
但字段主体文件始终为 0。
@生成的值将仅适用于主键。
它不适用于非主键的字段。
它甚至不能用于复合主键。
但是生成类型为什么不能应用于非主字段?
一个可能的答案是大多数旧版本的数据库要么不支持非主键字段的 AUTO_INCREMENT(生成的值),要么如果它们支持也有约束的较新版本-像 MySQL
每个 table 只能有一个 AUTO_INCREMENT 列,它必须被索引,并且不能有默认值。
那么这个零在您的数据库中是从哪里来的呢?
这是因为你的数据类型 'Long' 它的默认值存储在你的数据库中。
有关@Generated 值的更多详细信息official documentation
我需要创建一个自动递增的键(不是主键)以将其用作 spring-data 中的文件名 这是我尝试过的:
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "BODY_FILE")
private long bodyFile;
在 liquibase 中:
- column:
name: BODY_FILE
type: BIGINT
autoIncrement: true
但字段主体文件始终为 0。
@生成的值将仅适用于主键。
但是生成类型为什么不能应用于非主字段?
一个可能的答案是大多数旧版本的数据库要么不支持非主键字段的 AUTO_INCREMENT(生成的值),要么如果它们支持也有约束的较新版本-像 MySQL
每个 table 只能有一个 AUTO_INCREMENT 列,它必须被索引,并且不能有默认值。
那么这个零在您的数据库中是从哪里来的呢?
这是因为你的数据类型 'Long' 它的默认值存储在你的数据库中。
有关@Generated 值的更多详细信息official documentation