Val*_*der 6 oracle persistence hibernate jpa sequence
我有一个表,其索引由一个使用序列的触发器自动填充(Oracle数据库)
CREATE TABLE A
(
IDS NUMBER(10) NOT NULL
)
CREATE OR REPLACE TRIGGER A_TRG
BEFORE INSERT
ON A REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
:new.IDS := A_SEQ.nextval;
END A_TRG;
/
Run Code Online (Sandbox Code Playgroud)
我有一个匹配的Java类:
Class A {
@Id
@SequenceGenerator(name = "aSequence", sequenceName = "A_SEQ", allocationSize = 1)
@GeneratedValue(generator = "aSequence", strategy = GenerationType.SEQUENCE)
@Column(name = "IDS")
Long id;
...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试像这样坚持A的实例时:
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
A a = new A();
Long id = getHibernateTemplate().save(a);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
我遇到这个问题:
save call = "X"返回的代码中的ID
数据库中的ID = "X + 1"
有没有办法设置Hibernate让数据库触发器创建ID?
谢谢
Val*_*der 11
使用Oracle Trigger在HIbernate问题中找到响应,用于从序列生成id
我需要调整我的触发器才能在没有给出ID的情况下运行:
CREATE OR REPLACE TRIGGER A_TRG
BEFORE INSERT
ON A REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
WHEN (New.IDS is null) -- (1)
BEGIN
:new.IDS := A_SEQ.nextval;
END A_TRG;
/
Run Code Online (Sandbox Code Playgroud)
(1)这一行允许Hibernate手动调用A_SEQ.nextVal来设置ID,然后绕过触发器,否则Hibernate将无用地获取nextval,因为触发器将始终重置ID再次调用nextval
归档时间: |
|
查看次数: |
9149 次 |
最近记录: |