0

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

这是我的触发器

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;

我想使用我正在使用的休眠获取此 ID

  session.persist(cashierOrganization);
  session.flush();
  cashierOrganization = (Organizations) session.merge(cashierOrganization);

但我总是得到 0 的 id 有什么建议吗?

4

1 回答 1

1

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

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

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

希望这有帮助!

于 2013-04-25T15:36:56.923 回答