@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抽象类?有什么用?
最佳答案
首先,使用注解作为我们的配置方法只是一种方便的方法,而不是应对无休止的 XML 配置文件。
@Id
注解继承自javax.persistence.Id
,表示下面的成员字段是当前实体的主键。因此,您的 Hibernate 和 spring 框架以及您可以基于此注释执行一些 reflect
工作。详情请查看javadoc for Id
@GenerateValue
注解用于配置指定列(字段)的递增方式。例如,使用Mysql
时,可以在table的定义中指定auto_increment
,使其自增,然后使用
@GeneratedValue(strategy = GenerationType.IDENTITY)
在 Java 代码中表示您也承认使用此数据库服务器端策略。另外,您可以更改此注释中的值以满足不同的要求。
1。在数据库中定义序列
例如,Oracle 必须使用sequence
作为增量方法,假设我们在 Oracle 中创建一个序列:
create sequence oracle_seq;
2。引用数据库序列
现在我们已经有了数据库中的序列,但是我们需要建立Java和DB之间的关系,使用@SequenceGenerator
:
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
sequenceName
是 Oracle 中序列的真实名称,name
是您想要在 Java 中调用它的名称。如果sequenceName
与name
不同,则需要指定,否则仅使用name
。我通常忽略 sequenceName
以节省时间。
3。在Java中使用序列
最后,是时候在 Java 中使用这个序列了。只需添加 @GeneratedValue
:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
generator
字段指的是您要使用的序列生成器。请注意,它不是 DB 中的真实序列名称,而是您在 SequenceGenerator
的 name
字段中指定的名称。
4。完成
所以完整的版本应该是这样的:
public class MyTable
{
@Id
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
private Integer pid;
}
现在开始使用这些注释来使您的 JavaWeb 开发变得更容易。
关于java - 注解@Id和@GenerateValue(strategy = GenerationType.IDENTITY)有什么用?为什么世代类型是身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59769912/