这些jpa注释值中的任何一个都是多余的吗?

时间:2016-12-05 01:45:02

标签: hibernate jpa

我正在阅读this tutorial,是否有任何定义主键的注释值是多余的?

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Long id;

换句话说,作者可能只有:

@Id
private Long id;

得到相同的结果?

1 个答案:

答案 0 :(得分:1)

所有注释都不是冗余。它们中的每一个都会影响非常具体的行为,具体取决于您的域模型的需求。

  • @Id
    此注释标识应该参与实体的主键的属性/字段。
  • @GeneratedValue
    此批注允许指定应如何派生属性/字段的值。如果省略此注释,则假定该值由应用程序提供。
  • @Column
    此批注描述属性/字段的模式表示,指定名称,插入的特征,可更新性和可空性设置等。通过省略此批注,persister提供程序将使用一系列默认值来表示数据库模式表示属性/领域。

在前一个示例中,标识符值将由数据库级别的AUTO_INCREMENT或IDENTITY表示派生,并将映射到名为" id"这不是空的。

在后一个示例中,假定提供标识符值,因此必须在持久化实体之前设置它。排除@Column注释与此特定情况无关,因为Hibernate将使用以属性名称命名的列,因此字段为" id"将会被使用。主键默认情况下不可为空且不可更新。