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:
Domain Klassen
Hilfsklassen & Test
Konfigurations-XML
Was läuft noch falsch? Ich weiss leider nicht mehr weiter.
Grüße
David
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