Mik*_*ike 6 postgresql hibernate jpa
我有一个关于Postgres和GenerationType.Identity与Sequence的问题
在这个例子中......
@Id
@SequenceGenerator(name="mytable_id_seq",
sequenceName="mytable_id_seq",
allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator="mytable_id_seq")
Run Code Online (Sandbox Code Playgroud)
我知道我正在通过注释指定Postgres序列.
但是,我有一个用'serial'类型定义的id列,我读过我可以简单地使用GenerationType.IDENTITY,它会自动生成一个db序列并用它来自动递增.
如果是这种情况,我认为使用SEQUENCE注释没有优势,除非您使用id的整数或者有一些特定的理由使用您创建的其他序列.IDENTITY的代码很少,并且可能使它在数据库中可移植.
有什么我想念的吗?
提前感谢您的反馈.
Gle*_*enn 16
如果您有一个类型的列SERIAL,则使用以下内容注释您的id字段就足够了:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
Run Code Online (Sandbox Code Playgroud)
这告诉Hibernate数据库将负责生成id列.数据库如何实现自动生成是特定于供应商的,并且可以被认为是对Hibernate"透明"的.Hibernate只需要知道在插入id行之后,它会以某种方式检索该行的值.
如果使用GenerationType.SEQUENCE,您告诉Hibernate数据库不会自动填充id列.相反,Hibernate负责从指定的序列中获取下一个序列值,并id在插入行时将其用作值.所以Hibernate正在生成和插入id.
在Postgres的情况下,SERIAL通过创建序列并将其用作默认列值来实现定义列.但是正在填充id字段的数据库因此使用GenerationType.IDENTITY告诉Hibernate数据库正在处理id生成.
这些参考可能有所帮助
https://www.postgresql.org/docs/8.1/static/datatype.html#DATATYPE-SERIAL
| 归档时间: |
|
| 查看次数: |
9826 次 |
| 最近记录: |