JPA, Spring, löschen einer Entity

Status
Nicht offen für weitere Antworten.

reinsle

Mitglied
Hy zusammen,

ich bin im Moment leicht am verzweifeln :)

Ich bin ja im Moment dabei eine Anwendung von OJB auf JPA / Hibernate zu Portieren. Was klappt sind die Inserts / Updates, was ich aber nicht schaffe sind die Deletes.

Ich bekomme immer diese Exception:

Java:
Caused by: java.lang.IllegalArgumentException: Removing a detached instance de.on_ergy.sova.sysadm.data.model.Environment#ASDF    
	at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:45)
	at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:108)
	at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:74)
	at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:794)
	at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:772)
	at org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:253)
	at org.springframework.orm.jpa.JpaTemplate$7.doInJpa(JpaTemplate.java:281)
	at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:183)
	... 62 more

Die persistence.xml

[XML]
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="DataSource" transaction-type="RESOURCE_LOCAL">
<class>...Environment</class>
<class>...SourceTyp</class>
<class>...Umwandlungsprocedure</class>
</persistence-unit>
</persistence>
[/XML]

Die Spring-Config.xml

[XML]
<!-- Referenz auf die OSGI-Services -->
<osgi:reference id="DataSource" interface="...IParameterizedDataSource" />

<!-- EntitiyManager -->
<bean id="EntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" lazy-init="true">
<property name="dataSource" ref="DataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
</bean>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.ejb.naming_strategy">...SysadminNamingStrategy</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
</props>
</property>
</bean>

<!-- Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="EntityManagerFactory"/>
<property name="dataSource" ref="DataSource"/>
</bean>
<tx:annotation-driven/>

<!-- Spring JPA support -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

<context:annotation-config/>

<!-- Templates -->
<bean id="JpaTemplate" class="org.springframework.orm.jpa.JpaTemplate" lazy-init="true">
<property name="entityManagerFactory" ref="EntityManagerFactory" />
</bean>

<!-- DAOs -->
<bean id="EnvironmentDao" class="...EnvironmentDao">
<property name="jpaTemplate" ref="JpaTemplate" />
</bean>
[/XML]

Das Entity:

Java:
@Entity
public class Environment {
	public static final int LEN_ENVIRONMENT = 8;
	public static final int LEN_BEZEICHNUNG = 256;

	@Id
	@Column(updatable = false, insertable = true, nullable = false, length = 8, unique=true)
	private String environment;
	@Column(length = 256, nullable=false, insertable=true, updatable=true)
	private String bezeichnung;

        [+ die Getter und Setter passend dazu]
}

Die Methode zum Löschen schaut dann so aus:

Java:
	/**
	 * Loeschen des Objectes
	 * 
	 * @param entity das Object
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public void delete(final T entity) {
		if (LOG.isInfoEnabled()) {
			LOG.info(MessageFormat.format("Löschen des Objectes: {0}", String.valueOf(entity)));
		}
		getJpaTemplate().merge(entity);
		getJpaTemplate().remove(entity);
	}

Das merge hab ich mal mit reingepackt, aber das war so nicht vorgesehen.

Hab im Moment keine Idee mehr was da schieflaufen könnte.

- Transaktionssteuerung sollte ja so funktionieren, weil insert / update ja auch klappt
- Detaches Object heisst ja das die Entity nicht mit der Session verbunden ist, aber das sollte mit dem Merge ja auch tun.

Sonst fällt mir akut nix mehr ein, was da ned tun sollte.

Hat mir evtl jemand n Tipp was ich noch machen kann?

Danke euch.
 
M

maki

Gast
Ich nutze nicht das JpATemplate von Spring sondern den JPA EntityMAnager direkt(wie auch in der Doku empfohlen), aber laut Fehlermeldung versuchst du eine sog. Detached Entity zu löschen, merge sollte dir doch eine attached Entity als Rückgabewert zurückliefern, versuch doch mal diese zu löschen.

Java:
        T attachedEntity = getJpaTemplate().merge(entity);
        getJpaTemplate().remove(attachedEntity);
 

reinsle

Mitglied
Hy,

Ich nutze nicht das JpATemplate von Spring sondern den JPA EntityMAnager direkt(wie auch in der Doku empfohlen), aber laut Fehlermeldung versuchst du eine sog. Detached Entity zu löschen, merge sollte dir doch eine attached Entity als Rückgabewert zurückliefern, versuch doch mal diese zu löschen.

Java:
        T attachedEntity = getJpaTemplate().merge(entity);
        getJpaTemplate().remove(attachedEntity);

Und sieheda es funktioniert:

Java:
	/**
	 * Loeschen des Objectes
	 * 
	 * @param entity das Object
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public void delete(final T entity) {
		if (LOG.isInfoEnabled()) {
			LOG.info(MessageFormat.format("Löschen des Objectes: {0}", String.valueOf(entity)));
		}
		getJpaTemplate().execute(new JpaCallback<T>() {
			public T doInJpa(EntityManager em) throws PersistenceException {
				T e = em.merge(entity);
				em.remove(e);
				return null;
			}
		});
	}

Danke dir

Robert
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand JDBC Client Spring: Pool läuft voll Datenbankprogrammierung 6
T Cast-Fehler: Spring Data exists.... boolean??? Datenbankprogrammierung 1
T Spring MongoDB: Auswertung schlägt fehl Datenbankprogrammierung 1
T Spring MongoDB: Prüfen ob bereits eine Email existiert Datenbankprogrammierung 15
T Spring MongoDB @Indexed(unique=true) Datenbankprogrammierung 0
T Spring MongoDB self-reference Datenbankprogrammierung 2
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
OnDemand Spring Boot Speichern in Threads Datenbankprogrammierung 6
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
M Spring, JPA, Hibernate, H2 Datenbankprogrammierung 2
J Hibernate + Spring + SQL Server => Performanceprobleme :( Datenbankprogrammierung 4
S gesamte Tabelle löschen Datenbankprogrammierung 2
F SQLite Datensatz löschen Datenbankprogrammierung 13
R PostgreSQL JPA - Löschen und orphanRemoval Datenbankprogrammierung 6
B Mit Button einen Datensatz löschen Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
B Fortlaufende Nummer - Was tun bei löschen? Datenbankprogrammierung 6
R eclipselink - referenzierte Entity löschen Datenbankprogrammierung 0
P Indizes / Fremdschlüssel löschen Datenbankprogrammierung 2
H Oracle Aus Datenbank löschen Datenbankprogrammierung 6
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
A Ausgewählten Jtable Eintrag aus Db löschen Datenbankprogrammierung 9
reibi Derby/JavaDB Derby DB löschen Datenbankprogrammierung 5
P JPA- Entities bleiben nach dem Löschen (unsichtbar?) in der Datenbank Datenbankprogrammierung 6
J Datensätze löschen Datenbankprogrammierung 6
O Löschen vieler Datensätze mit Hibernate Datenbankprogrammierung 11
C Hibernate Datensatz löschen Datenbankprogrammierung 2
U Nur den ersten Datensatz löschen wenn mehrere gleiche da sind Datenbankprogrammierung 2
M Datenbankeintrag bleibt nach Löschen in JSP vorhanden Datenbankprogrammierung 8
D Mit Trigger Tupel löschen verhindern Datenbankprogrammierung 3
L MySQL Einträge löschen schlägt fehl Datenbankprogrammierung 2
F hibernate_seqeunce reseten (löschen) Datenbankprogrammierung 2
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
M HSQLDB 2.0 - wie tmp-Verzeichnis löschen Datenbankprogrammierung 2
turmaline [Hibernate] @OneToOne: Löschen einer referenzierten Instanz Datenbankprogrammierung 2
G Oracle Zeile löschen Datenbankprogrammierung 2
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
Java.getSkill() Datensatz / Tupel automatisch nach xy Tagen / Stunden löschen Datenbankprogrammierung 7
D SQL : Objekte individuell löschen können Datenbankprogrammierung 5
H MySQL Einträge löschen Datenbankprogrammierung 5
M Datensatz aus Datenbank löschen Datenbankprogrammierung 6
Antoras Zeile aus DB löschen und ID runterzählen Datenbankprogrammierung 8
C Objekte aus Datenbank löschen Datenbankprogrammierung 6
F Löschen einer Zeile Datenbankprogrammierung 4
G Mit Java-Programm Datenbank löschen/neu anlegen Datenbankprogrammierung 5
G Löschen eines Eintrages verbunden mit JList Datenbankprogrammierung 5
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
P Tabellen löschen Datenbankprogrammierung 4
O Size ResultSet betrachtete Zeilen "löschen" Datenbankprogrammierung 5
G MySQL Zeile löschen und gleich Optimieren Datenbankprogrammierung 6
T [jdbc] einen Eintrag aus mehreren Tabellen löschen (Batch) Datenbankprogrammierung 3
G mySQL: kaskadierendes Löschen Datenbankprogrammierung 7
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
D Zweckmäßigkeit einer Schlüsseltabelle Datenbankprogrammierung 4
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Variable in main soll mit der generierten Zahl aus einer Methode ausgefüllt werden Datenbankprogrammierung 3
N Oracle SQL - Nächst kleineren Namen2 zu einem Namen aus einer Tabelle Datenbankprogrammierung 3
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
D JPA gleiche methode funktioniert an einer Stelle, an der anderen nicht Datenbankprogrammierung 3
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
pkm Frage zu Encodingproblem bei einer Datenbankanbindung Datenbankprogrammierung 1
B Frage bei einer SQL Query Datenbankprogrammierung 3
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
J In einer bestimmten Spalte suchen mit Suchfeld (MS SQL) Datenbankprogrammierung 7
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
J Sql Anfrage nach einer Zeile beenden Datenbankprogrammierung 6
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
S Anmelden an einer msql datennbank Datenbankprogrammierung 1
F Auslesen einer .dbf-Datei, Zuordnung Index Datenbankprogrammierung 0
ralfb1105 Oracle Zwei ojdbc Driver in einer Applikation? Datenbankprogrammierung 13
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
Dimax MySQL 10 höchsten Werte aus einer Tabelle ermitteln Datenbankprogrammierung 30
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
temi Wie kann ich "Class" in einer DB speichern? Datenbankprogrammierung 2
F UPDATE - Befehl nur in einer Zeile Datenbankprogrammierung 11
I Oracle Wie ermitteln, welche Benutzer-(!)Tabellen in einer DB sind? Datenbankprogrammierung 1
DaCrazyJavaExpert Derby/JavaDB Wert einer Variable in der Datenbank direkt auf 1 setzten. Datenbankprogrammierung 71
D MySQL Suche nach Max Value in einer Tabelle Datenbankprogrammierung 7
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
MrSnake Hilfe bei erstellen einer DB Datenbankprogrammierung 12
M Wie übergebe ich Datenbankobjekte aus einer sql-Datenbank einer Java Klasse bzw. Instanz Datenbankprogrammierung 7
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
E Wie kann man mit einer ID-Spalte über eine Parameterübergabe auf eine Seite verweisen? Datenbankprogrammierung 17
E Warum funktioniert das Erzeugen einer View nicht? Datenbankprogrammierung 1
E Kann man in einer if-Bedingung auch SELECT-Statements überprüfen? Datenbankprogrammierung 23
E Was sind die Vorteile von DB2 im Gegensatz zu einer Oracle-Datenbank? Datenbankprogrammierung 5
E Wie geschieht der konzeptueller Entwurf einer Datenbank Datenbankprogrammierung 1
I SQLite Objekt speichern einer Serialisierter Klasse Datenbankprogrammierung 1
D HSQLDB INSERT INTO in einer For Schleife mit selber ID, machbar? Alternative? Datenbankprogrammierung 7
I Inhalt einer hsqldb anzeigen Datenbankprogrammierung 1
J Realisierung einer DB in Combi mit Java Datenbankprogrammierung 13
Androbin [Serializing] Mehrere Objekte in einer einzigen Datei speichern Datenbankprogrammierung 1
S Auswahl einer Datenbank Datenbankprogrammierung 0
M Derby/JavaDB Speicherplatz einer Zeile bestimmen Datenbankprogrammierung 0
P JPA in einer größeren Java SE Anwendung Datenbankprogrammierung 0

Ähnliche Java Themen


Oben