我正在使用在插入序列之前触发的触发器为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任何建议吗?
答案 0 :(得分:1)
在插入过程中,您是否尝试使用自定义生成器来获取触发器设置的Id?使用Oracle时,这是一种相对常见的情况。试着用这个:
@Id
@GeneratedValue(generator="triggerGenerator")
@GenericGenerator(name="triggerGenerator",
strategy="package.to.my.custom.generator.TriggerAssignedIdentityGenerator")
private Long id;
TriggerAssignedIdentityGenerator是一个实现自定义生成器策略的类,其实现在Hibernate论坛的主题中显示:
希望这有帮助!