@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
为什么我们使用这个注解?我需要知道这是否会自动增加我的表 id 值。 (GenerationType.IDENTITY) 是否有任何其他类型在我们使用此注释时实际发生了什么
public class Author extends Domain
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "name")
private String name;
@Column(name = "address")
private String address;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "authorId")
private List<Book>
bookList;
public Author()
{
setServiceClassName("wawo.tutorial.service.admin.AuthorService");
}
}
*是否需要扩展Domain抽象类?有什么用?
原文由 Lijo 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,使用注解作为我们的配置方法只是一种方便的方法,而不是应付无穷无尽的 XML 配置文件。
@Id
注解继承自javax.persistence.Id
,表示下面的成员字段是当前实体的主键。因此,您的 Hibernate 和 spring 框架以及您可以做一些reflect
基于此注释的工作。有关详细信息,请检查 javadoc 的 Id@GeneratedValue
注解是配置指定列(字段)的递增方式。例如使用Mysql
时,可以在表的定义中指定auto_increment
使其自增,然后使用在 Java 代码中表示您也承认使用此数据库服务器端策略。此外,您可以更改此注释中的值以适应不同的要求。
1.在数据库中定义Sequence
例如,Oracle 必须使用
sequence
作为增量方法,假设我们在 Oracle 中创建一个序列:2.参考数据库序列
现在我们在数据库中有序列,但是我们需要建立 Java 和 DB 之间的关系,使用
@SequenceGenerator
:sequenceName
是Oracle中序列的真实名称,name
是Java中你想调用它的名称。您需要指定sequenceName
如果它不同于name
,否则只需使用name
。我通常会忽略sequenceName
以节省我的时间。3.在Java中使用序列
最后,是时候在 Java 中使用这个序列了。只需添加
@GeneratedValue
:generator
字段是指您要使用的序列生成器。请注意,它不是 DB 中的真实序列名称,而是您在 — 的SequenceGenerator
name
字段中指定的名称。4.完成
所以完整的版本应该是这样的:
现在开始使用这些注解来简化您的 JavaWeb 开发。