日期:2014-05-20  浏览次数:20716 次

hibernate annotation/postgresql serial:自动生成ID的问题

数据库里,我的ID列使用了postgresql的serial类型。插入的适合不插入,数据库可自动生成一个序号。
 The data types serial and bigserial are not true types, but merely a notational convenience for setting up unique identifier columns (similar to the AUTO_INCREMENT property supported by some other databases). In the current implementation, specifying:

CREATE TABLE tablename (
  colname SERIAL
);

is equivalent to specifying:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
  colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
我使用的hibernate annotation。而不是xml文件注释。
1,------------------
我设定为
@Id
@GeneratedValue
Integer id;
的适合,提示我找不到"hibernate_sequence"。当然我创建一个这样的seq就不会出现问题。可是我希望数据库来使用hibernate。
2,------------------
现实中,每个表的ID对应一个seq。但是我不想每个类里都手动去设定找个seq的名字。我给我的所有的类都使用这个:
@Id
@SequenceGenerator(name = "comm_serial", allocationSize = 1, initialValue = 1, sequenceName = "comm_serial")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "comm_serial")
Integer id;
请问,------------------
在hibernate annotation里,如何简洁的实现ID由pgsql来生成值?而不是我创建一个特定的seq,或者挨个挨个为每个pojo指定seq。

------解决方案--------------------
我也是刚刚脱离postgresql 这个数据库。真的很那个....
现在换oracle11g了
oracle前身,按照seq做的索引。
现在我们也是每个id都要指定。没找到更好的办法。
关注ing