OpenJPA @GeneratedValue内部行为

时间:2014-06-04 15:08:28

标签: postgresql openjpa

我的核心项目中有许多实体使用@GeneratedValue。正如我在documentation

中读到的那样
  

使用特殊的单行表来存储全局序列号

在我的数据库中,表已经创建:

CREATE TABLE openjpa_sequence_table
(
  id smallint NOT NULL,
  sequence_value bigint,
  CONSTRAINT openjpa_sequence_table_pkey PRIMARY KEY (id)
)

我的问题是:表中的每个插入都会使用@GeneratedValue注释的实体递增序列的值吗?

select * from openjpa_sequence_table

检索exaclty与select (max) id from one_table相同的值,这让我觉得我的第一个问题的答案是否定的。
但是,其他表从哪里获取自动递增的id?

问题:我们希望隔离OpenJPA并仅与DB中的存储过程一起使用。当我们想要创建一个SP来插入不同的元素时,我们意识到了这个问题,我怎样才能获得ID?目前,所有ID都是在openjpa_sequence_table中生成的。

提前致谢。

修改

使用@GeneratedValue的实体之一:

@Entity
@Table(name = "email_address")
public class BlackListedAddress extends BaseEntity implements Serializable {

    /**
     * The auto-generated primary key.
     */
    @Id
    @GeneratedValue
    @Column(name = "email_id")
    private long id;

DB中的这个表:

CREATE TABLE email_address
(
  email_id bigint NOT NULL,
  address character varying(255) NOT NULL,
  CONSTRAINT email_list_pkey PRIMARY KEY (email_id),
  CONSTRAINT email_list_unique_text UNIQUE (address)
)
WITH (
  OIDS=FALSE
);

0 个答案:

没有答案