Problem mit Hibernate, ID wird nicht aktualisiert

Johannes7146

Goldschnabel
Wenn ich ein Objekt mit Hibernate in die DB speichere, wird es vollkommen korrekt in der DB angelegt. Es wird eine neue ID vergeben.
Das Objekt welches ich in Java habe, wird allerdings nicht aktualisiert, sprich die ID ist dort noch 0.

Testklasse:
Java:
public class Test {
	public static void main(String[] args) {
		Schulung s = new Schulung();
		s.setOrt("Berlin");
		s.setThema(dbhandler.getThemaById(2));
		s.setDatum(new Timestamp(System.currentTimeMillis()));
		try {
			dbhandler.saveOrUpdateObject(s);
			System.out.println(s.getId());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Ausgabe:
Code:
Hibernate: insert into schulungen.schulung (ort, datum, thema_id, id) values (?, ?, ?, ?)
0

Das hier ist die Methode des dbhandlers die ich zum Speichern nutze.
Java:
public static void saveOrUpdateObject(Object o) throws Exception{
			Session session = HibernateSessionFactory.currentSession();
			Transaction t = session.beginTransaction();
			t.begin();
			session.saveOrUpdate(o);
			t.commit();
	}

Die Session wird später durch einen Filter geschlossen.

Das hier ist meine Schulung.java:
Java:
package com.ac.schulung.model;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "schulung", schema = "schulungen")
public class Schulung implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "id", unique = true, nullable = false, insertable = true, updatable = false, precision = 22, scale = 0)
	private int id;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "thema_id", unique = false, nullable = false, insertable = true, updatable = true)
	private Thema thema;

	@Column(name = "datum", unique = false, nullable = true, insertable = true, updatable = true, precision = 22, scale = 0)
	private Timestamp datum;

	@Column(name = "ort", unique = false, nullable = true, insertable = true, updatable = true, precision = 22, scale = 0)
	private String Ort;

	@OneToMany(fetch = FetchType.EAGER, mappedBy = "schulung")
	private Set<Anmeldung> anmeldungen;

	public int getId() {
		return id;
	}

	public Set<Anmeldung> getAnmeldungen() {
		return anmeldungen;
	}

	public void setAnmeldungen(Set<Anmeldung> anmeldungen) {
		this.anmeldungen = anmeldungen;
	}

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

	public Thema getThema() {
		return thema;
	}

	public void setThema(Thema thema) {
		this.thema = thema;
	}

	public Timestamp getDatum() {
		return datum;
	}

	public void setDatum(Timestamp datum) {
		this.datum = datum;
	}

	public String getOrt() {
		return Ort;
	}

	public void setOrt(String ort) {
		Ort = ort;
	}

}

Wo liegt der Fehler?
Hat jemand von euch eine Idee?
 
Nachdem die Session zu ist, sollte die ID eigentlich da sein. Hibernate flusht die Änderungen möglichst spät in die DB, um den Kommunikationsoverhead zu minimieren. Du kannst mal versuchen Session.flush() zu rufen. Danach sollte die ID gesetzt sein. Allerdings sollte man das Flushen der Session eigentlich nicht von Hand machen...

Gruß
Ollie
 
Hey Oliver, vielen Dank für die schnelle Rückmeldung.

session.flush() und session.refresh() hab ich beides schon getestet.
Leider kein Erfolg.
 
Steht denn in der Datenbank überhaupt was drin? Du hast gar keinen Generator für die Id definiert, und ich weiß nicht ob es da einen Default gibt, der autoincrement nutzt, oder ob die Spalte einfach leer bleibt.

Gruß
Ollie
 
Zurück