@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
字段是指您要使用的序列生成器。请注意,它不是数据库中真正的序列名称,而是您在 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 和@GeneratedValue(strategy = GenerationType.IDENTITY) 有什么用?为什么世代类型是身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20603638/