Hibernate - OneToMany - mappedBy reference an unknown target entity property

  • Themenstarter Themenstarter hbrs.david
  • Beginndatum Beginndatum
H

hbrs.david

Gast
Hi zusammen,

ich versuche mich an einer einfachen Hibernate-Programmierung. Leider bekomme ich eine Exception, die ich nicht direkt zuordnen kann.

Also hier die Fehlermeldung:
Exception in thread "main" org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: de.hbrs.datenanalyse.domain.Zeile.Zeile in de.hbrs.datenanalyse.domain.Datensatz.zeilen
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:685)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:645)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:65)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1689)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1396)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1829)
at de.hbrs.datenanalyse.HibernateFacade.<init>(HibernateFacade.java:17)
at de.hbrs.datenanalyse.CreateTest.main(CreateTest.java:22)

Domain Klassen

Java:
 package de.hbrs.datenanalyse.domain;

import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.OneToMany;
import javax.persistence.Column;

@Entity
@Table(name = "datensaetze")
public class Datensatz {
	
    @Id
    @GeneratedValue
    @Column (name = "datensatz_id")
    private Long id;
    
    @Column (name = "datensatzname")
	private String datensatzname;
    
    @Column (name = "jahr")
    private Integer jahr;
   
    
    public Datensatz(){    	
    }
    
    public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getDatensatzname() {
		return datensatzname;
	}

	public void setDatensatzname(String datensatzname) {
		this.datensatzname = datensatzname;
	}

	public Integer getJahr() {
		return jahr;
	}

	public void setJahr(Integer jahr) {
		this.jahr = jahr;
	}
	
	@OneToMany(mappedBy="Zeile")
	private Set<Zeile> zeilen;
	public Set<Zeile> getZeilen() {
		return zeilen;
	}

	public void setZeilen(Set<Zeile> zeilen) {
		this.zeilen = zeilen;
	}
	    
}

Java:
 package de.hbrs.datenanalyse.domain;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.OneToMany;

@Entity
@Table(name = "kreise")
public class Kreis {
	
    @Id
    @Column (name = "kreisschluessel")
    private Long kreisschluessel;
    
    @Column (name = "kreisname")
    private String kreisname;
    
    @Column (name = "einwohner")
    private Integer einwohner;
    
    @Column (name = "beschreibung")
    private String beschreibung;
    
    public Kreis(){
    }

	public Long getKreisschluessel() {
		return kreisschluessel;
	}

	public void setKreisschluessel(Long kreisschluessel) {
		this.kreisschluessel = kreisschluessel;
	}

	public String getKreisname() {
		return kreisname;
	}

	public void setKreisname(String kreisname) {
		this.kreisname = kreisname;
	}

	public Integer getEinwohner() {
		return einwohner;
	}

	public void setEinwohner(Integer einwohner) {
		this.einwohner = einwohner;
	}

	public String getBeschreibung() {
		return beschreibung;
	}

	public void setBeschreibung(String beschreibung) {
		this.beschreibung = beschreibung;
	}
	
	@OneToMany(mappedBy="Zeile")
	private Set<Zeile> zeilen;
	public Set<Zeile> getZeilen() {
		return zeilen;
	}

	public void setZeilen(Set<Zeile> zeilen) {
		this.zeilen = zeilen;
	}
	
    
}

Java:
package de.hbrs.datenanalyse.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "zeilen")
public class Zeile {
	
	@Id
    @GeneratedValue
    @Column (name = "zeilen_id")
    private Long id;
	
	@Column (name = "wert")
	private Double wert;
	
	public Zeile(){
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Double getWert() {
		return wert;
	}

	public void setWert(Double wert) {
		this.wert = wert;
	}
	
	@ManyToOne
	@JoinColumn(name="datensatz_id")
	private Datensatz datensatz;
	public Datensatz getDatensatz() {
		return datensatz;
	}

	public void setDatensatz(Datensatz datensatz) {
		this.datensatz = datensatz;
	}
	
	
	@ManyToOne
	@JoinColumn(name="kreisschluessel")
	private Kreis kreis;
	public Kreis getKreis() {
		return kreis;
	}

	public void setKreis(Kreis kreis) {
		this.kreis = kreis;
	}

}

Hilfsklassen & Test

Java:
 package de.hbrs.datenanalyse;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.classic.Session;

import de.hbrs.datenanalyse.domain.Datensatz;
import de.hbrs.datenanalyse.domain.Kreis;
import de.hbrs.datenanalyse.domain.Zeile;

import de.hbrs.datenanalyse.HibernateFacade;


public class CreateTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		
		HibernateFacade facade = new HibernateFacade();

		Session session = facade.getSession();
		session.beginTransaction();
		
		Kreis kreis = new Kreis();
		kreis.setKreisschluessel((long) 123);
		kreis.setKreisname("Rhein-Sieg-Kreis");
		kreis.setEinwohner(1201288);
		kreis.setBeschreibung("Rhein-Sieg-Kreis");
		
		Zeile zeile1 = new Zeile();
		zeile1.setKreis(kreis);
		zeile1.setWert(45.3);
		
		Zeile zeile2 = new Zeile();
		zeile2.setKreis(kreis);
		zeile2.setWert(54.3);
	
		Set<Zeile> zeile = new HashSet<Zeile>();
		zeile.add(zeile1);
		zeile.add(zeile2);
		
		Datensatz datensatz = new Datensatz();
		datensatz.setDatensatzname("Schweinedichte");
		datensatz.setJahr(2009);
		datensatz.setZeilen(zeile);

		session.getTransaction().commit();
		
		
		

	}

}

Java:
package de.hbrs.datenanalyse;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class HibernateFacade {

    private SessionFactory sessionFactory;

    public HibernateFacade() throws Exception {

	// A SessionFactory is set up once for an application
	Configuration config = new Configuration().configure();

	// configures settings from hibernate.cfg.xml
	sessionFactory = config.buildSessionFactory();

	System.out.println("Hibernate successfully initiated");
    }

    public Session getSession() {
	return sessionFactory.getCurrentSession();
    }

    public Session createNewSession() {
	return sessionFactory.openSession();
    }
}

Konfigurations-XML
Java:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

	<session-factory>
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>

		<property name="connection.url">jdbc:mysql://localhost/datenanalyse</property>
		<property name="connection.username">root</property>
		<property name="connection.password"></property>

		<!-- this will show us all sql statements -->
		<property name="hibernate.show_sql">true</property>

		<!-- more options -->
		<property name="current_session_context_class">thread</property>
		<property name="cache.provider_class">
			org.hibernate.cache.NoCacheProvider
		</property>

		<property name="hibernate.max_fetch_depth">3</property>
		<property name="max_fetch_depth">3</property>

		<!-- Drop and re-create the database schema on startup -->
		<!-- <property name="hbm2ddl.auto">update/create</property> -->
		<property name="hbm2ddl.auto">update</property>
		
		<mapping class="de.hbrs.datenanalyse.domain.Datensatz" />
		<mapping class="de.hbrs.datenanalyse.domain.Zeile" />
		<mapping class="de.hbrs.datenanalyse.domain.Kreis" />

	</session-factory>

</hibernate-configuration>

Was läuft noch falsch? Ich weiss leider nicht mehr weiter.

Grüße

David
 
Java:
@OneToMany(mappedBy="Zeile")
Code:
mappedBy
erwartet den Namen des Feldes über das die Beziehung aufgebaut werden soll. Das wären bei dir wohl
Code:
kreis
und
Code:
datensatz
.
 

Neue Themen


Zurück
Oben