Ruhezustand-Problem mit Oracle-Trigger zur Erzeugung id aus einer Sequenz

Wir haben ein before-insert-trigger, der bekommt den nächsten Wert aus der Sequenz. Wenn das Objekt persistiert wird mit save () - Methode, hibernate, bekommt den Wert aus der Sequenz und fügt es an das Objekt. und wenn für die Transaktion von Spring-service-layer, den ID-Wert ist wieder gestiegen auf die Datenbank. wie kann ich vermeiden, nextval() wenn das Objekt bereits über ein id..

Hier ist, was ich ma versuchen zu tun..

UserDao

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

UserService

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

Und der User-Klasse

 @Entity
  public class User{

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

Erreicht der cursor line1 und line2 Benutzer-Objekt null-Wert im Attribut id. nach line2, es hat nextval from sequence - sagen wir 1. auf line4, habe ich Hinzugefügt, Benutzer-id=1 zu useraudit Objekt.. wenn die Transaktion ein commit ausgeführt wird, nachdem die Linie 5, 2 eingefügt wird, die Benutzer-id-Spalte und 1 in UserAudit die userId-Spalte. Dieser dient keinem Zweck zu mir 🙁 Wie kann ich dieses Problem vermeiden? Danke!

InformationsquelleAutor RKodakandla | 2011-11-03
Schreibe einen Kommentar