我是Hibernate的新手,问题是“Hibernate中是否需要ID类标记?”
在我的表中有下面提到的触发器,我的表是现有表并且有记录。我刚从Native SQL到Hibernate会话进行了代码更改。在这种情况下“生成器类是否需要Hibernate中的ID标签?”。这里我的例外是记录需要插入下一个序列值。
TRIGGER TRG_BI_APPLICATION_DATA_LOCK
BEFORE INSERT
ON APPLICATION_DATA_LOCK REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
exception_no_null_pk EXCEPTION;
BEGIN
IF :new.APP_DATA_LOCK_ID is null
THEN
SELECT SEQ_APPLICATION_DATA_LOCK_PK.nextval
INTO :new.APP_DATA_LOCK_ID
FROM dual;
END IF;
END;
假设在插入调用触发器之前将创建下一个ID值并且将发生插入。那么,在hbm文件中,我们需要生成器类还是需要生成器必须使用的手段? 请帮助我......
...谢谢
答案 0 :(得分:0)
我将推断你在问题标题中提出的问题,答案是否定的,你不需要@GeneratedValue注释来使你的ID工作,只要你想指定a)你的ID将是Hibernate未生成的值,b)如果要指定ID的生成方式。
我认为你需要做的是:
@Entity
@Table
public class Foo{
@Id
@GeneratedValue(generator = "applicationLockSequence")
@SequenceGenerator(name = "applicationLockSequence" sequenceName = "SEQ_APPLICATION_DATA_LOCK_PK")
private int id;
....
}
这基本上指定数据库上有一个具有该名称的序列,并且Hibernate应该使用该序列在保存时为您的对象分配ID。没有必要在具有触发器的数据库级别执行此操作,尽管这也是一种有效的方法。如果您想使用触发器执行此操作,请忽略@GeneratedValue
和@SequenceGenerator
。
希望能回答你的问题。
TL; DR OP正在使用.hbm文件进行休眠映射。 如下所示:How To Use Sequence In Hibernate As A Property In XML Mapping
<id name="id" column="item_id>
<generator class="sequence">
<param name="sequence">SEQ_APPLICATION_DATA_LOCK_PK</param>
</generator>
</id>
应该是你需要做的所有事情。