我正在阅读this tutorial,是否有任何定义主键的注释值是多余的?
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Long id;
换句话说,作者可能只有:
@Id
private Long id;
得到相同的结果?
答案 0 :(得分:1)
所有注释都不是冗余。它们中的每一个都会影响非常具体的行为,具体取决于您的域模型的需求。
在前一个示例中,标识符值将由数据库级别的AUTO_INCREMENT或IDENTITY表示派生,并将映射到名为" id"这不是空的。
在后一个示例中,假定提供标识符值,因此必须在持久化实体之前设置它。排除@Column
注释与此特定情况无关,因为Hibernate将使用以属性名称命名的列,因此字段为" id"将会被使用。主键默认情况下不可为空且不可更新。