ale*_*wan 24 postgresql hibernate sequence auto-increment
我正在使用Hibernate 3.3和PostgreSQL 8.x,并希望使用Hibernate注释来映射不是主键的自动递增列.
使用SERIAL类型或Postgres中的序列映射列无关紧要,只要它由数据库而不是Hibernate自动递增即可.我尝试了以下映射,但它们始终生成null orderId.
@Column(name = "orderId", insertable = false)
@Generated(GenerationTime.INSERT)
//@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
private Integer orderId;
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何帮助.
谢谢
axt*_*avt 30
以下映射应该可以正常工作:
@Column(name = "orderId")
@Generated(GenerationTime.INSERT)
private Integer orderId;
Run Code Online (Sandbox Code Playgroud)
但请注意,在刷新会话之前,新生成的对象的生成值不可用.
编辑:请注意,这种映射不会影响Hibernate serial在模式生成期间创建类型列,因为Hibernate对数据库端的值生成的性质一无所知.因此,如果您希望Hibernate创建具有适当类型的列,则需要明确指定它:
@Column(name = "orderId", columnDefinition = "serial")
@Generated(GenerationTime.INSERT)
private Integer orderId;
Run Code Online (Sandbox Code Playgroud)
在最近的Hibernate版本(4.3)中,您可以使用:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long orderId;
Run Code Online (Sandbox Code Playgroud)
pst*_*ton 22
接受的答案对我不起作用.
这样做虽然:
@Id
@Column(name = "your_id", columnDefinition = "serial")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer yourId;
Run Code Online (Sandbox Code Playgroud)
小智 5
我将它与 postgresql9.1 一起使用,也应该与 8 一起使用:
@SequenceGenerator(allocationSize=1, initialValue=1, sequenceName="account_id_seq", name="account_id_seq")
@GeneratedValue(generator="account_id_seq", strategy=GenerationType.SEQUENCE)
@Id
@Column(name="id")
private Integer id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33498 次 |
| 最近记录: |