注解@Id和@GeneratedValue(strategy = GenerationType.IDENTITY)有什么用? 为什么生成types是身份?
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
为什么我们使用这个注释? 我需要知道这是否自动增加我的表ID值。 (GenerationType.IDENTITY)有什么其他types什么实际上发生在我们使用这个注释
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"); } }
*是否需要扩展领域抽象类?有什么用?
让我回答这个问题:
首先,使用注释作为我们的configuration方法只是一个方便的方法,而不是应付无尽的XMLconfiguration文件。
@Id
注解是从javax.persistence.Id
inheritance的,表示下面的成员字段是当前实体的主键。 因此,你的Hibernate和Spring框架以及你可以做一些基于这个注释的reflect
作品。 详情请查看javadoc的Id
@GeneratedValue
注释用于configuration指定列(字段)的增量方式。 例如,当使用Mysql
,可以在表的定义中指定auto_increment
使其自增量,然后使用
@GeneratedValue(strategy = GenerationType.IDENTITY)
在Java代码中表示你也承认使用这个数据库服务器端策略。 此外,您可以更改此注释中的值以适应不同的要求。
1.定义数据库中的序列
例如,Oracle必须使用sequence
作为增量方法,比方说我们在Oracle中创build一个序列:
create sequence oracle_seq;
2.参考数据库的顺序
现在我们在数据库中有了序列,但是我们需要使用@SequenceGenerator
来build立Java和DB之间的关系:
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
sequenceName
是Oracle中sequenceName
的真实名称, name
是你想在Java中调用它的name
。 如果不同于name
,则需要指定sequenceName
,否则使用name
。 我通常忽略sequenceName
来节省时间。
3.在Java中使用顺序
最后,现在是在Java中使用这个序列的时候了。 只需添加@GeneratedValue
:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
generator
字段是指要使用哪个序列生成器。 请注意,它不是DB中的真实序列名称,而是您在SequenceGenerator
name
字段中指定的name
。
4.完成
所以完整的版本应该是这样的:
public class MyTable { @Id @SequenceGenerator(name="seq",sequenceName="oracle_seq") @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq") private Integer pid; }
现在开始使用这些注释来简化JavaWeb开发。
在一个对象关系映射上下文中,每个对象都需要有一个唯一的标识符。 您使用@Id
注释来指定实体的主键。
@GeneratedValue
注释用于指定如何生成主键。 在你的例子中,你正在使用一个Identity
策略
指示持久性提供程序必须为使用数据库标识列的实体分配主键。
还有其他的策略,你可以在这里看到更多。