【发布时间】:2015-05-18 14:00:38
【问题描述】:
我正在尝试配置一个映射类以使用我在 postgres 数据库中定义的序列。当我尝试保留任何实体时,ID 始终为零,如果我使用 select nextval('item_seq'),我将得到 1(或下一个 val)。我使用 intellij 重新生成类。这个项目中的休眠版本是 3.6.0,如果这可能是我的问题的一部分?
@Entity
@Table(name = "item")
public class Item {
private int itemid;
...
@Basic
@Id
@SequenceGenerator(name = "item_seq", sequenceName = "item_seq", allocationSize = 1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "item_seq")
@Column(name = "itemid", unique = true, nullable = false, insertable = true, updatable = true)
public int getItemid() {
return itemid;
}
...
}
用法
Item item = new Item();
item.setCreated(new Date());
item.setVendorId(vendorId);
save(item); // essentially is getHibernateTemplate().save(Item.class.getName(), item);
-- 编辑--
我一直在尝试以下建议,但一切似乎都在继续生成 0 作为 id 或抛出异常“必须在调用 save() 之前手动分配此类的 id”。这就是我现在所处的位置,作为最后的努力,我尝试将注释移动到变量声明而不是 getter。没有帮助。
@Entity
@Table(name = "item")
public class Item {
@Id
//@SequenceGenerator(name = "item_seq", sequenceName = "item_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.IDENTITY) //, generator = "item_seq")
@Column(name = "itemid", unique = true, nullable = false) //, insertable = true, updatable = true)
private Long itemid;
...
public Long getItemid() {
return itemid;
}
}
【问题讨论】:
-
我在一个项目中使用了 postgres + hibernate 并且工作得很好。尝试删除allocationSize = 1。通常hibernate在插入之前会选择nextval('item_seq')。
-
我尝试从序列生成器注释中删除 allocationSize 选项,但没有改变。还结合将类型更改为“整数”进行了尝试。
-
将 IDENTITY 生成器策略与 postgres 一起使用,并且不定义序列。它有效
标签: java hibernate postgresql annotations sequence