1. <legend id='DGCKb'><style id='DGCKb'><dir id='DGCKb'><q id='DGCKb'></q></dir></style></legend><tfoot id='DGCKb'></tfoot>

          <bdo id='DGCKb'></bdo><ul id='DGCKb'></ul>

        <small id='DGCKb'></small><noframes id='DGCKb'>

        <i id='DGCKb'><tr id='DGCKb'><dt id='DGCKb'><q id='DGCKb'><span id='DGCKb'><b id='DGCKb'><form id='DGCKb'><ins id='DGCKb'></ins><ul id='DGCKb'></ul><sub id='DGCKb'></sub></form><legend id='DGCKb'></legend><bdo id='DGCKb'><pre id='DGCKb'><center id='DGCKb'></center></pre></bdo></b><th id='DGCKb'></th></span></q></dt></tr></i><div id='DGCKb'><tfoot id='DGCKb'></tfoot><dl id='DGCKb'><fieldset id='DGCKb'></fieldset></dl></div>
      1. 使用 Oracle Trigger 从序列生成 id 的 HIbernate 问题

        时间:2023-09-19
        <legend id='LrcI5'><style id='LrcI5'><dir id='LrcI5'><q id='LrcI5'></q></dir></style></legend>
          <tbody id='LrcI5'></tbody>
        • <small id='LrcI5'></small><noframes id='LrcI5'>

              <tfoot id='LrcI5'></tfoot>

                • <bdo id='LrcI5'></bdo><ul id='LrcI5'></ul>
                • <i id='LrcI5'><tr id='LrcI5'><dt id='LrcI5'><q id='LrcI5'><span id='LrcI5'><b id='LrcI5'><form id='LrcI5'><ins id='LrcI5'></ins><ul id='LrcI5'></ul><sub id='LrcI5'></sub></form><legend id='LrcI5'></legend><bdo id='LrcI5'><pre id='LrcI5'><center id='LrcI5'></center></pre></bdo></b><th id='LrcI5'></th></span></q></dt></tr></i><div id='LrcI5'><tfoot id='LrcI5'></tfoot><dl id='LrcI5'><fieldset id='LrcI5'></fieldset></dl></div>
                  本文介绍了使用 Oracle Trigger 从序列生成 id 的 HIbernate 问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我们有一个前插入触发器,它从序列中获取下一个值.当使用 save() 方法持久化对象时,hibernate 从序列中获取值并将其添加到对象中.当事务从 Spring 的服务层提交时,数据库上的 ID 值再次增加.如果对象已经有一个 id,我如何避免获取 nextval() ..

                  We have a before insert trigger that gets the next value from sequence. When the object is persisted with save() method, hibernate gets the value from the sequence and adds it to the object. and when the transaction is committed from Spring's service layer, the ID value is again increased on the database. how do I avoid getting nextval() if the object already has an id..

                  这就是我想要做的..

                  用户道

                  public User saveUser(User user){
                        session.getCurrentSession.save(user);//line2
                        return user;//line3  
                   }
                  

                  用户服务

                  public void saveUserAndWriteToAudit(User user, UserAudit userAudit){
                    userDao.saveUser(user);//line1
                    userAudit.setUserId(user.getId);//line4
                    userAudit.saveUserAudit(userAudit);//line5
                  }
                  

                  和用户类

                   @Entity
                    public class User{
                  
                       @Id
                       @GeneratedValue(strategy=GenerationType.AUTO, generator="a1")
                       @SequenceGenerator(name="a1", sequenceName="usersequence")
                       private Long id;
                       /////////////////
                   }
                  

                  当光标到达第 1 行和第 2 行时,用户对象的 id 属性为空.在第 2 行之后,它具有序列中的 nextval - 比如说 1.在第 4 行上,我已将用户的 id=1 添加到 useraudit 对象中.当在第 5 行之后提交事务时,2 被插入到用户的 id 列中,1 被插入到 UserAudit 的 userId 列中.这对我没有任何意义:(我该如何避免这个问题?谢谢!

                  When the cursor reaches line1 and line2 user object has null in id attribute. after line2, it has nextval from sequence - lets say 1. on line4, i have added user's id=1 to useraudit object.. when transaction is committed after line 5, 2 is inserted into User's id column and 1 into UserAudit's userId column. This serves no purpose to me :( How do I avoid this issue? Thanks!

                  推荐答案

                  只需将触发器更新为仅在未指定 id 时触发.

                  Just update your trigger to only fire when not given an id.

                  create or replace
                  trigger sa.my_trigger
                  before insert on sa.my_table
                  for each row
                  when (new.id is null)
                  begin
                     select sa.my_sequence.nextval
                      into :new.id
                      from dual;
                  end;
                  

                  这篇关于使用 Oracle Trigger 从序列生成 id 的 HIbernate 问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:如果行不存在,则 Oracle 插入 下一篇:与 Oracle 的 CONNECT BY ... START WITH 等效的 PostgreSQL 语法是什么?

                  相关文章

                  <legend id='qq8yJ'><style id='qq8yJ'><dir id='qq8yJ'><q id='qq8yJ'></q></dir></style></legend>

                • <small id='qq8yJ'></small><noframes id='qq8yJ'>

                • <tfoot id='qq8yJ'></tfoot>

                      <i id='qq8yJ'><tr id='qq8yJ'><dt id='qq8yJ'><q id='qq8yJ'><span id='qq8yJ'><b id='qq8yJ'><form id='qq8yJ'><ins id='qq8yJ'></ins><ul id='qq8yJ'></ul><sub id='qq8yJ'></sub></form><legend id='qq8yJ'></legend><bdo id='qq8yJ'><pre id='qq8yJ'><center id='qq8yJ'></center></pre></bdo></b><th id='qq8yJ'></th></span></q></dt></tr></i><div id='qq8yJ'><tfoot id='qq8yJ'></tfoot><dl id='qq8yJ'><fieldset id='qq8yJ'></fieldset></dl></div>
                        <bdo id='qq8yJ'></bdo><ul id='qq8yJ'></ul>