Hallo Forum 
Ich versuche mich derzeit ein bisschen in Hibernate
Dabei geht es um eine relativ einfache Anwendung:
Eine Finanzverwaltung hat mehrere Konten auf denen Geld ein und ausgänge gebucht werden können.
Jede Buchung hat natürlich genau ein Konto (also nicht die klassische Buchführung. Ganz einfach gehalten
)
Nun gibt es zu den Buchungen und den Konten Pojo's und XML-Dateien.
Buchung.java
Konto.java
Buchung.hbm.xml
[xml]
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="objects.Buchung" table="BUCHUNG">
<id name="id" column="ID" type="integer">
<generator class="native"/>
</id>
<property name="text" column="TEXT" type="string" not-null="true"/>
<property name="betrag" column="BETRAG" type="big_decimal"/>
<property name="datum" column="DATUM" type="timestamp"/>
<property name="regelDatum" column="REGEL_DATUM" type="date" not-null="true"/>
<property name="del" column="DELETE" type="boolean"/>
<property name="storno" column="STORNO" type="boolean"/>
<many-to-one name="konto" column="ID_KONTO" class="objects.Konto"/>
</class>
</hibernate-mapping>
[/xml]
Konto.hbm.xml
[xml]
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="objects.Konto" table="KONTO">
<id name="id" column="ID" type="integer">
<generator class="native"/>
</id>
<property name="bez" column="BEZ" type="string" not-null="true"/>
<property name="farbe" column="FARBE" type="java.awt.Color"/>
<set name="buchung" cascade="all" lazy="true">
<key column="ID_KONTO"/>
<one-to-many class="objects.Buchung"/>
</set>
</class>
</hibernate-mapping>
[/xml]
So, nun versuche ich ein Konto anzulegen:
Das ganze wird natürlich noch etwas ausgelagert, dient nur zu Testzwecken.
Wenn ich mir das ganze ausgeben lasse (hab dafür ne Methode geschrieben) gibt er auch brav alles aus.
Nun Versuche ich eine Buchung durchzuführen:
Die Methode save ist static.
Prinzipiell steht in ihr das drine was ich oben beim Konto schon gemacht habe, nur mit etwas mehr exception handling.
Nun um zum Ende zu kommen: Das geht nicht
Als Exception-Message erhalte ich "null".
Hab ich da irgendwas falsch verknüpft?
Warum funktioniert das so nciht?
Danke für eure Hilfe!
Ich versuche mich derzeit ein bisschen in Hibernate
Dabei geht es um eine relativ einfache Anwendung:
Eine Finanzverwaltung hat mehrere Konten auf denen Geld ein und ausgänge gebucht werden können.
Jede Buchung hat natürlich genau ein Konto (also nicht die klassische Buchführung. Ganz einfach gehalten
Nun gibt es zu den Buchungen und den Konten Pojo's und XML-Dateien.
Buchung.java
Java:
package objects;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Date;
public class Buchung {
private int id;
private Konto konto;
private String text;
private BigDecimal betrag;
private Timestamp datum;
private boolean del;
private boolean storno;
private Date regelDatum;
public int getId() { return id; }
public Konto getKonto() { return konto; }
public String getText() { return text; }
public BigDecimal getBetrag() { return betrag; }
public Timestamp getDatum() { return datum; }
public void setDatum(Timestamp datum) { this.datum = datum; }
public boolean isDel() { return del; }
public boolean isStorno() { return storno; }
public Date getRegelDatum() { return regelDatum; }
public void setId( int id ) { this.id = id; }
public void setKonto( Konto konto ) { this.konto = konto; }
public void setText( String text ) { this.text = text; }
public void setBetrag( BigDecimal betrag) { this.betrag = betrag; }
public void setDel( boolean del) { this.del = del; }
public void setStorno( boolean storno) { this.storno = storno; }
public void setRegelDatum( Date regelDatum) { this.regelDatum = regelDatum; }
}
Konto.java
Java:
package objects;
import java.awt.Color;
import java.util.HashSet;
import java.util.Set;
public class Konto {
private int id;
private String bez;
private Color farbe;
private Set<Buchung> buchung = new HashSet<Buchung>();
public int getId() { return id; }
public String getBez() { return bez; }
public Color getFarbe() { return farbe; }
public Set<Buchung> getBuchung() { return buchung; }
public void setId( int id ) { this.id = id; }
public void setBez( String bez) { this.bez = bez; }
public void setFarbe( Color farbe) { this.farbe = farbe; }
public void setBuchung(Set<Buchung> buchung) { this.buchung = buchung; }
}
Buchung.hbm.xml
[xml]
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="objects.Buchung" table="BUCHUNG">
<id name="id" column="ID" type="integer">
<generator class="native"/>
</id>
<property name="text" column="TEXT" type="string" not-null="true"/>
<property name="betrag" column="BETRAG" type="big_decimal"/>
<property name="datum" column="DATUM" type="timestamp"/>
<property name="regelDatum" column="REGEL_DATUM" type="date" not-null="true"/>
<property name="del" column="DELETE" type="boolean"/>
<property name="storno" column="STORNO" type="boolean"/>
<many-to-one name="konto" column="ID_KONTO" class="objects.Konto"/>
</class>
</hibernate-mapping>
[/xml]
Konto.hbm.xml
[xml]
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="objects.Konto" table="KONTO">
<id name="id" column="ID" type="integer">
<generator class="native"/>
</id>
<property name="bez" column="BEZ" type="string" not-null="true"/>
<property name="farbe" column="FARBE" type="java.awt.Color"/>
<set name="buchung" cascade="all" lazy="true">
<key column="ID_KONTO"/>
<one-to-many class="objects.Buchung"/>
</set>
</class>
</hibernate-mapping>
[/xml]
So, nun versuche ich ein Konto anzulegen:
Java:
Konto kto = new Konto();
kto.setBez("Schule");
kto.setFarbe(Color.black);
kto.setId(1);
session = InitSessionFactory.getInstance()
.getCurrentSession();
tx = session.beginTransaction();
session.save(kto);
tx.commit();
Das ganze wird natürlich noch etwas ausgelagert, dient nur zu Testzwecken.
Wenn ich mir das ganze ausgeben lasse (hab dafür ne Methode geschrieben) gibt er auch brav alles aus.
Nun Versuche ich eine Buchung durchzuführen:
Java:
Buchung bg = new Buchung();
bg.setId(1);
bg.setBetrag(new BigDecimal(12.0));
bg.setDatum(new Timestamp(12345));
bg.setRegelDatum(null);
bg.setStorno(false);
bg.setText("tesbuchung");
bg.setDel(false);
bg.setKonto(KontenControler.getKontoById(1));
BuchungsControler.save(bg);
Die Methode save ist static.
Prinzipiell steht in ihr das drine was ich oben beim Konto schon gemacht habe, nur mit etwas mehr exception handling.
Nun um zum Ende zu kommen: Das geht nicht
Als Exception-Message erhalte ich "null".
Hab ich da irgendwas falsch verknüpft?
Warum funktioniert das so nciht?
Danke für eure Hilfe!