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

标签 java sql hibernate java-annotations

@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/

相关文章:

java - 属性前缀 fn 不对应任何导入的标签库

mysql - 按时间戳对所有联合结果进行排序

java - 在 Spring 的 Session Expiry 之前执行自定义事件

Hibernate:获取具有过滤子集合的整个层次结构

java - SmbException : A duplicate name exists on the network: how to prove that a few servers have the same DNS name 异常

java - Jcreator运行文件时出错

sql - Sql Server中图片数据类型转String时的字符问题

java - hibernate 流程

Java for循环性能问题

mysql - 如何编写 sql 查询来查找段落中的单词?