Derby/JavaDB OpenJPA, @oneToMany und Probleme

schulhaus

Mitglied
Guten Tag zusammen :)

Seit einiger Zeit versuche ich eine OneToMany-Beziehung mit OpenJPA zu realisieren. Leider klappt dies nicht so wie ich mir das vorstelle. Die entsprechende Liste, welche ich von der Entität "Forrest" durch den Getter "getTrees()" erhalte, ist leider immer leer.

Für einen kleinen Tipp wäre ich sehr dankbar. Natürlich bin ich auch über sonstige Kritik sehr froh :)

Der abgesetzte Query stimmt meiner Meinung nach:
Code:
499  Test  TRACE  [main] openjpa.jdbc.SQL - <t 30091157, conn 31614466> executing prepstmnt 21072336 SELECT t0.id, t1.id, t1.height, t1.name FROM Forrest t0 INNER JOIN Tree t1 ON t0.id = t1.FORREST_ID ORDER BY t0.id ASC


Mein Versuchsaufbau sieht wie folgt aus:
Entität "Tree":
Java:
package test.inverseMapping.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "Tree")
public class Tree {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

	private String name;

	private int height;

	@ManyToOne(targetEntity = Forrest.class)
	private Forrest forrest;

	/**
	 * @return the id
	 */
	public long getId() {
		return id;
	}

	/**
	 * @param pId
	 *            the id to set
	 */
	public void setId(long pId) {
		id = pId;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param pName
	 *            the name to set
	 */
	public void setName(String pName) {
		name = pName;
	}

	/**
	 * @return the height
	 */
	public int getHeight() {
		return height;
	}

	/**
	 * @param pHeight
	 *            the height to set
	 */
	public void setHeight(int pHeight) {
		height = pHeight;
	}

	/**
	 * @return the forrest
	 */
	public Forrest getForrest() {
		return forrest;
	}

	/**
	 * @param pForrest the forrest to set
	 */
	public void setForrest(Forrest pForrest) {
		forrest = pForrest;
	}
}

Entität "Forrest":
Java:
package test.inverseMapping.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "Forrest")
public class Forrest {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

	private String name;

	@OneToMany(targetEntity = Tree.class, mappedBy = "forrest", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
	private List<Tree> trees;

	/**
	 * @return the id
	 */
	public long getId() {
		return id;
	}

	/**
	 * @param pId
	 *            the id to set
	 */
	public void setId(long pId) {
		id = pId;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param pName
	 *            the name to set
	 */
	public void setName(String pName) {
		name = pName;
	}

	/**
	 * @return the trees
	 */
	public List<Tree> getTrees() {
		return trees;
	}

	/**
	 * @param pTrees
	 *            the trees to set
	 */
	public void setTrees(List<Tree> pTrees) {
		trees = pTrees;
	}
}

Testfall:
Java:
package test.inverseMapping.test;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import junit.framework.TestCase;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import test.inverseMapping.entity.Forrest;
import test.inverseMapping.entity.Tree;

public class OneToManyTest extends TestCase {

	private EntityManager entityManager;

	@Before
	public void setUp() throws Exception {
		EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("Test");
		entityManager = entityManagerFactory.createEntityManager();
	}

	@After
	public void tearDown() throws Exception {
		entityManager.close();
	}

	@Test
	public void testPersistenceUnit() {
		assertEquals(true, entityManager.isOpen());
	}

	@Test
	public void testInverseMapping() {
		entityManager.getTransaction().begin();

		Forrest forrest = new Forrest();

		forrest.setName("Shadow Wood");

		entityManager.persist(forrest);

		for (int i = 0; i < 10; i++) {
			Tree tree = new Tree();
			
			tree.setHeight(i * 8);
			tree.setName("tree " + i);
			tree.setForrest(forrest);
			
			entityManager.persist(tree);
		}

		entityManager.getTransaction().commit();

		Forrest answer = entityManager.createQuery("SELECT f FROM Forrest f", Forrest.class).getSingleResult();

		List<Tree> trees = answer.getTrees();
		System.out.println(trees.size());
		for (Tree tree : trees) {
			System.out.println(tree.getName());
		}
		
		Tree testTree = entityManager.createQuery("SELECT t FROM Tree t", Tree.class).getResultList().get(0);
		
		System.out.println(testTree.getForrest().getName());
	}

}

Links welche zum Problem passen:
Understanding the Java Persistence API, Part 2: Relationships the JPA way - JavaWorld
Apache OpenJPA 2.1 User's Guide
http://www.java-forum.org/datenbankprogrammierung/103316-unidirektionale-onetomany-beziehung.html
One to Many MappingJPAJava
 
Zuletzt bearbeitet:

schulhaus

Mitglied
Den Fehler habe ich soeben gefunden.

Dabei ist es wichtig, den InverseManager zu aktivieren. Dies geschieht nach Manual mit:
[XML]<property name="openjpa.InverseManager" value="true"/>[/XML]

Danach sind die Collections von einem Inversemapping abgefüllt.

Apache OpenJPA 2.1 User's Guide

Komplette Persistence.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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_2_0.xsd">
<persistence-unit name="Test" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>test.inverseMapping.entity.Forrest</class>
<class>test.inverseMapping.entity.Tree</class>
<properties>
<property name="openjpa.ConnectionURL" value="jdbc:derby:data/db;create=true" />
<property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="openjpa.ConnectionUserName" value="user" />
<property name="openjpa.ConnectionPassword" value="user" />

<property name="openjpa.InverseManager" value="true"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add,deleteTableContents',ForeignKeys=true)"/>
<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
</properties>
</persistence-unit>
</persistence>
[/XML]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D OpenJPA Zeichenvorrat in DB & Fremdschlüssel ohne Entität Datenbankprogrammierung 5
D Hibernate oneToMany Syntaxfehler Datenbankprogrammierung 3
S @OneToMany @JoinTable failed to lazily initialize a collection Fehler Datenbankprogrammierung 2
OnDemand Hibernate OneToMany ManyToOne Datenbankprogrammierung 61
K bidirektionale OneToMany Endlosschleife Datenbankprogrammierung 6
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
turmaline [Hibernate] @OneToMany - Eine referenzierte Tabelle abfragen Datenbankprogrammierung 11
J MySQL Hibernate: Probleme beim Speichern von OneToMany - Datensätzen Datenbankprogrammierung 2
I JAVADB (Derby) OneToMany Datenbankprogrammierung 2
A JPA + @OneToMany + String ArrayList Datenbankprogrammierung 4
GilbertGrape hibernate: Problem mit OneToMany Datenbankprogrammierung 4
G Hibernate oneToMany Not null Datenbankprogrammierung 4
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
Kirby.exe Probleme mit docker-compose.yml Datenbankprogrammierung 4
B Probleme mit Datenbankverbindung Datenbankprogrammierung 2
N java SQL JAR - Probleme Datenbankprogrammierung 18
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
T Oracle Probleme bei getTableName Datenbankprogrammierung 8
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
D Probleme bei Einsteiger Aufgabe SQL Datenbankprogrammierung 2
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
H Probleme mit Unicodedarstellung in Derby DB Datenbankprogrammierung 1
M MySQL probleme beim "Generate Tables from Entities" Datenbankprogrammierung 9
L Probleme mit DriverManager.getConnection(..) - Endlosschleife, Java Absturz, Keine Exception Datenbankprogrammierung 4
S Derby/JavaDB Probleme beim anlegen einer embedded DB Datenbankprogrammierung 13
P Probleme mit meinem 1. Hibernate Beispiel Datenbankprogrammierung 3
W Probleme mit AND und OR Datenbankprogrammierung 5
D DB Tabelle in JTable anzeigen - Probleme Datenbankprogrammierung 8
Gossi CallableStatement Probleme Datenbankprogrammierung 8
D Probleme bei der Erzeugung einer Tabelle Datenbankprogrammierung 15
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
R Derby/JavaDB Insert Statement Probleme Datenbankprogrammierung 14
L Derby/JavaDB Derby macht Probleme Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
M Probleme mit Triggering Datenbankprogrammierung 2
F DB2 Probleme mit dem DriverManager Datenbankprogrammierung 4
I MySQL Probleme mit kyrillischen Zeichen Datenbankprogrammierung 2
A Derby/JavaDB Probleme beim Einbinden Datenbankprogrammierung 2
S Probleme mit INSERT Befehl Datenbankprogrammierung 11
R isLast() Probleme bei Pervasive Datenbankprogrammierung 5
S Probleme mit localhost Datenbankprogrammierung 14
M Oracle Probleme mit dem anbinden einer Oracle 10g Datenbank Datenbankprogrammierung 27
P Hibernate -> Probleme bei n:m-Relation und JUnit Datenbankprogrammierung 10
J Probleme mit Datenbankzeiger Datenbankprogrammierung 19
A Probleme mit auf DB2 Express zugreiffen Datenbankprogrammierung 6
N Probleme beim Aufruf aus der DB Datenbankprogrammierung 7
M Probleme bei Select in Schleife Datenbankprogrammierung 7
G Probleme mit Datenbankanbindung Datenbankprogrammierung 3
R Probleme mit Insert Datenbankprogrammierung 2
P Probleme mit Oracle Timestamp Datenbankprogrammierung 3
klattiator Hibernate - Probleme bei Konfiguration Datenbankprogrammierung 3
F Probleme mit entfernter DB und Hibernate Zeichensatz Datenbankprogrammierung 3
G Probleme mit der Schnittstelle H1bernate/Eclipse Datenbankprogrammierung 6
A Probleme mit Jar-File in ein Jar-File Datenbankprogrammierung 8
O Derby Performance Probleme? Datenbankprogrammierung 4
V Probleme beim Öffnen "einiger" SuperbaseTabellen p Datenbankprogrammierung 8
G Probleme beim Methodenaufruf einer EJB Datenbankprogrammierung 10
ARadauer hibernate probleme Datenbankprogrammierung 13
Y Probleme mit H2 und Primary Key Datenbankprogrammierung 4
D Probleme mit mysql-Connection Datenbankprogrammierung 10
G INNODB backup probleme Datenbankprogrammierung 2
S Probleme mit statement.close() Datenbankprogrammierung 10
A Probleme beim Schreiben in eine CSV-Datei aus einer H2-DB Datenbankprogrammierung 2
G Probleme mit Laden des JDBC-Treiber in HSQLDB Datenbankprogrammierung 2
T Probleme mit Date in H2 Datenbank Datenbankprogrammierung 2
4 Probleme mit Select abfrage Datenbankprogrammierung 4
N Probleme mit Access-DB bei einem Webserver Datenbankprogrammierung 5
T Diverse JDBC Probleme (inner join, rs.last(), update) Datenbankprogrammierung 2
R Probleme mit Datensätzen in MySql DB Datenbankprogrammierung 3
B Oracle Driver Probleme Datenbankprogrammierung 2
I Probleme bei MySQL - Replikation Datenbankprogrammierung 2
R Probleme mit ausführbarem Jar Archiv Datenbankprogrammierung 9
F Probleme mit Jar Datei Datenbankprogrammierung 3
S String probleme Datenbankprogrammierung 3
R Probleme mit der Verbindung zum localhost Datenbankprogrammierung 12
S Probleme bei der Installation von MySQL 5.0 Datenbankprogrammierung 4
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13
G Probleme mit Access und Join Datenbankprogrammierung 3
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
M Daten von MySQL nach MSSql probleme beim schreiben Datenbankprogrammierung 3
S JDBC-Anfänger und Probleme beim Treiberfinden etc. Datenbankprogrammierung 4
T Probleme beim Verbindungsaufbau zum SQL 2000 Datenbankprogrammierung 2
G Probleme mit Datenbankeinträge Datenbankprogrammierung 4
G Probleme mit Treiber (connector) Datenbankprogrammierung 20
thE_29 getBytes() - russland/bulgarien -- andere Codecs Probleme Datenbankprogrammierung 8
E Probleme mit JDBC und Executable-Jar Datenbankprogrammierung 2
G Probleme mit MySQL - Anmeldung Datenbankprogrammierung 2
P Probleme mit NullPointerException Datenbankprogrammierung 5
K MySQL: Probleme mit dem Verbinden per IP-Adresse Datenbankprogrammierung 6
T Probleme mit Datenbank Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben