ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
524
524
EMPFEHLEN
-
Technologien: EJB 3, WAS 7, openJPA 1.2.irgendwas (benutzen aber JPA Annotationen)
Tabellenstruktur:
Tabelle Verfahren - Felder(nur die relevanten): ID (PK), STATUS(FK) NULLABLE
Tabelle Verfahrenstatus - Felder(nur die relevanten): ID (PK), VERFAHREN (FK) NOT NULL, STATUS
Java Domain:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
@Table(name = "verfahren") @Entity @Inheritance(strategy = InheritanceType.JOINED) public class Verfahren { .. @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinColumn(name = "status", nullable = true) private Verfahrenstatus aktuellerStatus; @OneToMany(mappedBy = "verfahren", cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.LAZY) private List<Verfahrenstatus> statusListe; .. } @Table(name = "verfahrenstatus") @Entity public class Verfahrenstatus { .. @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinColumn(name = "verfahren", nullable = false) private Verfahren verfahren; .. }
Weiters ist Verfahren nur die Vaterklasse div. Verfahrenimplementierungen (wurde in Java und in der Db umgesetzt, also die Vererbung).
Nun muss ich bei einem speziellen Fall bei einer Persistierung eines Verfahrens, nennen wir es VerfahrenA, innerhalb dergleichen Transaktion andere Verfahren updaten. Im Detail muss ich deren Status verändern.
Sprich der Code sieht ungefähr wie folgt aus(möchte nicht alles posten weil es den Rahmen sprengen würde):
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
@Stateless @TransactionManagement(TransactionManagementType.BEAN) public class Service { .. @Resource UserTransaction userTransaction; .. public Verfahren saveOrUpdateVerfahren(VerfahrenA verfahrenA, Person person) { userTransaction.begin(); verfahrenAFacade.create(verfahrenA); doForVerfahren(person); userTransaction.commit(); } public List<Verfahren> doForVerfahren(Person person) { List<Verfahren> list = verfahrenFacade.loadAllVerfahrenForPerson(person) for (Verfahren verfahren : list) { Verfahrenstatus status = new Verfahrenstatus(new Date(), EnumVerfahren.ENTZOGEN, verfahren); verfahren.setAktuellerStatus(status); verfahrenFacade.update(verfahren) } }
Also nochmal, ich hab ein VerfahrenA angelegt, bei selbigen muss ich prüfen ob dadurch andere Verfahren betroffen sind und falls dem so ist muss ich deren Status auf einen anderen Wert setzen. Das mache ich damit dass ich das Objekt verfahren (die Vaterklasse) update mit dem neuen Statuswert.
Das Problem:
Wenn bei der Iteration mehr als ein Verfahren vorkommt dann wird nur jenes Verfahren aktualisiert welches in der Iteration an der ersten Stelle steht, bei allen kommenden Verfahren wird der Status nicht verändert. Hat das etwas mit der Transaktion zu tun oder etwa ein Bug in openJPA?
**EDIT**
Also wenn ich die Transaktionsklammern weglasse
Code java:1 2
userTransaction.begin(); userTransaction.commit();
dann funktioniert alles, nur sollte halt alles in einer Transaktion passieren..
Ähnliche Themen
-
OpenJPA: Problem mit @GeneratedValue
Von Orthak im Forum JavaAntworten: 2Letzter Beitrag: 16.09.10, 19:30 -
Journal enthält unbeendete Transaktion
Von Serethos im Forum Linux & UnixAntworten: 0Letzter Beitrag: 04.06.10, 12:27 -
JDBC/DB2 - Transaktion
Von AvS im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 16.12.08, 17:15 -
OpenJPA Einführung
Von Smily0412 im Forum JavaAntworten: 4Letzter Beitrag: 09.03.08, 07:57 -
transaktion mssql -> oracle
Von help_me im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 24.09.05, 21:16





Zitieren
Login





