无法使用Hibernate检索Oracle中最后插入的行的ID

时间:2013-04-18 11:49:10

标签: java hibernate oracle11g

我正在使用在插入序列之前触发的触发器为Oracle 11g中的表生成id xe

这是我的触发器

DROP TRIGGER GOOGLEPLAY.ORGANIZATION_CODE_GENERATOR;

CREATE OR REPLACE TRIGGER GOOGLEPLAY.ORGANIZATION_code_generator
BEFORE INSERT
ON GOOGLEPLAY.ORGANIZATIONS 
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE

BEGIN

        select ORGANIZATION_SEQ.nextval into :NEW.code from dual;

EXCEPTION
   WHEN OTHERS
   THEN
      -- Consider logging the error and then re-raise
      RAISE;
END ORGANIZATION_code_generator;

这是我的序列

DROP SEQUENCE GOOGLEPLAY.ORGANIZATION_SEQ;

CREATE SEQUENCE GOOGLEPLAY.ORGANIZATION_SEQ
  START WITH 41
  MAXVALUE 99
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;

我想使用hibernate我正在使用

获取此ID
  session.persist(cashierOrganization);
  session.flush();
  cashierOrganization = (Organizations) session.merge(cashierOrganization);

但我总是得到0的ID任何建议吗?

1 个答案:

答案 0 :(得分:1)

在插入过程中,您是否尝试使用自定义生成器来获取触发器设置的Id?使用Oracle时,这是一种相对常见的情况。试着用这个:

@Id
@GeneratedValue(generator="triggerGenerator")
@GenericGenerator(name="triggerGenerator", 
    strategy="package.to.my.custom.generator.TriggerAssignedIdentityGenerator")
private Long id;

TriggerAssignedIdentityGenerator是一个实现自定义生成器策略的类,其实现在Hibernate论坛的主题中显示:

希望这有帮助!