@Id 
@GeneratedValue(strategy = 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");
    }
}

*有必要扩展域抽象类吗?有什么用?

推荐答案

首先,使用注释作为配置方法只是一种方便的方法,而不是处理无休止的XML配置文件.

@Id注释继承自javax.persistence.Id,表示下面的成员字段是当前实体的主键.因此,您可以使用Hibernate和spring框架,也可以基于此注释进行reflect项工作.详情请查javadoc for Id

@GeneratedValue注释用于配置指定列(字段)的增量方式.例如,当使用Mysql时,可以在表的定义中指定auto_increment,使其自增量,然后使用

@GeneratedValue(strategy = GenerationType.IDENTITY)

在Java代码中表示您也承认使用此数据库服务器端策略.此外,您可以更改此注释中的值以适应不同的要求.

1.在数据库中定义序列

例如,Oracle必须使用sequence作为增量方法,比如我们在Oracle中创建一个序列:

create sequence oracle_seq;

2.参考数据库序列

现在我们在数据库中有了序列,但我们需要使用@SequenceGenerator建立Java和DB之间的关系:

@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字段表示要使用的序列生成器.请注意,它不是DB中的真实序列名,而是您在SequenceGeneratorname字段中指定的名称.

4.完成

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

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

现在开始使用这些注释来简化JavaWeb开发.

Sql相关问答推荐

如何根据SQL中的列条件获取下一个时间戳?

在SQL:2003(PGQ)中,Cypher查询语言、GQL、PGQL和属性图查询的常见子集是什么?'

SQL更新,在2个额外的表上使用内部连接

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

使用`lag()`获取上一个时间戳

在多个柱上连接时,如何确定连接条件?

连接三个表的正确方式是什么?在这三个表中,可以显示在一个表上的行将在其他表中显示结果

如何在presto中映射id与名称

使用CTE在SNOWFLAKE中创建临时表

获取主表条目,其中最新的辅助条目是 6 个月前

给定 3 个键列,从一个表中 Select 另一表中不存在的所有数据

获取多个开始-结束时间戳集之间经过的时间

计算 ID 满足条件的次数

将一名成员金额分配给群组内的其他成员

SQL for Smarties 类型问题:从表中 Select 记录,并对某些值进行分组

postgres按组消除分区中的NULLS

忽略与给定列匹配的行的 LAG 函数

从每行中排除最大元素

为什么 Oracle 在一个查询中对同一张表同时执行 TABLE SCAN 和 INDEX UNIQUE SCAN?

Athena:从字符串birth_dt列计算年龄