gpt4 book ai didi

java - 注释@Id 和@GeneratedValue(strategy = GenerationType.IDENTITY) 有什么用?为什么世代类型是身份?

转载 作者:IT老高 更新时间:2023-10-28 13:53:09 33 4
gpt4 key购买 nike

@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

@GeneratedValue注解是配置指定列(字段)的递增方式。比如使用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 中要调用它的名称。如果与 name 不同,则需要指定 sequenceName,否则只需使用 name。我通常会忽略 sequenceName 以节省时间。

3。在 Java 中使用序列

最后,是时候在 Java 中使用这个序列了。只需添加 @GeneratedValue :

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")

generator 字段是指您要使用的序列生成器。请注意,它不是数据库中真正的序列名称,而是您在 SequenceGeneratorname 字段中指定的名称。

4。完成

所以完整的版本应该是这样的:

public class MyTable
{
@Id
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
private Integer pid;
}

现在开始使用这些注释来简化您的 JavaWeb 开发。

关于java - 注释@Id 和@GeneratedValue(strategy = GenerationType.IDENTITY) 有什么用?为什么世代类型是身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20603638/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com