[openJPA] Problem mit Transaktion?

y0dA

Top Contributor
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:
Java:
@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):
Java:
@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
Java:
userTransaction.begin();
userTransaction.commit();

dann funktioniert alles, nur sollte halt alles in einer Transaktion passieren..
 
Zuletzt bearbeitet:

y0dA

Top Contributor
Ähm, kann es sein das du zuerst autoCommit auf false setzen musst?

Hmm?
Wie sollte ich das anstellen und was sollte das autocommit damit zu tun haben dass nicht alles commited wird?

**EDIT**
Das Problem hat offensichtlich mit den Beziehungen zwischen Verfahren und Verfahrenstatus zu tun:
Java:
@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;
..
}

Denn wenn ich bei der Persistierung auch die statusListe berücksichtige (also in selbige den neuen Status setze) dann funktioniert alles korrekt - also meine Lösung ist dass ich nun die statusListe nachlade und bei jeder Änderung des Statust nicht nur das Feld aktuellerStatus neu setze sondern auch der statusListe den neuen Wert hinzufüge (wenn ich übrigend die statusListe EAGER mache dann geht es wiederum nicht..).
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Problem mit openJPA Data Tier 7
S JPA Hibernate Search & EclipseLink (oder OpenJPA) Data Tier 0
N Spring / OpenJPA Inheritance: Subklassen werden nicht erkannt Data Tier 4
S OpenJPA mit einem Java-SE-Projekt benutzen Data Tier 5
N Problem beim initialisieren des Caches Data Tier 0
S JPA Problem mit Cascading Data Tier 1
M Eclipse 4 RCP Hibernate Problem Data Tier 3
C JPA FetchType.LAZY, Relation @OneToMany und Problem mit dem update Data Tier 1
K Problem mit EJBs und Transaktionen Data Tier 0
G JPA: Entity Klasse @JoinColumns Problem Data Tier 2
M JPA Problem: java.sql.SQLSyntaxErrorException: Data Tier 7
H Hibernate Problem mit Lazy Loading bei @OneToMany Collections Data Tier 5
M MySql und JPA-Timestamp Problem Data Tier 8
J Hibernate Problem bei Master-Detail-Tabellen Data Tier 5
A JPA - ManyToMany Problem - keine Unique Mehrfachzuweisungen Data Tier 4
M Problem beim Laden von Objekten, die von anderen Applikationen in eine DB eingefügt wurden Data Tier 5
M Problem mit @Temporal Mapping und SQL Server Data Tier 3
P JPA - HashMap mit Many-to-Many Relation Problem Data Tier 4
B Problem mit @ManyToMany und CascadeType.ALL Data Tier 3
Blackskyliner [JPA][Anfänger] Problem mit Wertzuweisung aus Verbundtabelle Data Tier 2
B Problem mit org.hibernate.LazyInitializationException Data Tier 11
B DatenquellenUpdater extends Thread - Problem mit PermGenSpace Data Tier 5
S Problem beim Insert mit Hibernate Data Tier 9
A @SecondaryTable Problem Data Tier 9
N Problem beim session.flush(); Data Tier 17
Y Postgres und JPA - Primärschlüssel Problem Data Tier 3
P SQL PRoblem Hibernate? Data Tier 8
Y EJB Problem mit Transaktionen Data Tier 7
M Transaction / Session Problem Data Tier 4
G JPA 2.0 Query Problem Data Tier 3
P CORBA Problem bei EJB 3.0 Anwendung in Glassfish v3 Data Tier 7
F Problem mit Hibernate Schema Update Data Tier 2
S Lazy loading Problem Data Tier 2
M Insert-Problem mit JPA/Hibernate Data Tier 4
megachucky JPA - Problem mit Persistence Unit / Context Data Tier 1
H Hibernate Problem Data Tier 4
D Performance Problem mit Prepared Statement Data Tier 6
P Problem mit Data Tier 9
GilbertGrape Cascade Problem (Hibernate) Data Tier 3
C JPA Problem mit attributeOverride und mehrspaltigem PK Data Tier 2
B select "neu" statement Problem (jpql) Data Tier 8
boxi Hibernate Lazy Loading Problem Data Tier 2
M Problem mit Hibernate und SLF4J - NoSuchMethodException Data Tier 3
G Connection Problem - WAS 6.1, Hibernate, OS Authentication Data Tier 1
K Hibernate update-Problem Data Tier 36
J hibernate problem Data Tier 14
N Hibernate - Problem mit Update/Insert Data Tier 4
B Problem mit @PersistenceContext Data Tier 4
G Problem with mapped of the tables at one to one relationship Data Tier 8
J Transaktion zu lange / zu viel Speicher (JEE, JPA) Data Tier 1

Ähnliche Java Themen

Neue Themen


Oben