Hibernate SaveOrUpdate Exception

delphiking1980

Bekanntes Mitglied
Hallo zusammen ich hoffe es kann mir jemand helfen,

ich habe mal ein kleines Programm angefangen um mich in Hibernate einzuarbeiten.
Dazu habe ich eine Klasse Aufgabe welche in die Datenbank geschrieben werden soll.
Mit
Java:
List<Aufgabe> aufgabenListe = session.createQuery("from Aufgabe").list();
bekomme ich erfolgreich meine Objekte aus der DB welche ich vorher mit einem Insert Script selber reingeschrieben habe.

Nun möchte ich aber ein Objekt Aufgabe erstellen und mit den Settern Werte zuweisen.
Nur leider bekomme ich eine Exception.
Habe mir ein Buch besorgt und arbeite das paralel durch aber ich kann meinen Fehler nicht finden.


Java:
public class Aufgabe implements Serializable{

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String name;
	private Projekt projekt;
	private int datum;
	private int zeit;
	private String beschreibung;
	private Prioritaet prioritaet;
	private Status status;

	public Aufgabe() {
		/**
		 Konstruktor der Klasse
		 */
	}


	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Projekt getProjekt() {
		return projekt;
	}
	public void setProjekt(Projekt projekt) {
		this.projekt = projekt;
	}
	public int getDatum() {
		return datum;
	}
	public void setDatum(int datum) {
		this.datum = datum;
	}
	public int getZeit() {
		return zeit;
	}
	public void setZeit(int zeit) {
		this.zeit = zeit;
	}
	public String getBeschreibung() {
		return beschreibung;
	}
	public void setBeschreibung(String beschreibung) {
		this.beschreibung = beschreibung;
	}
	public Prioritaet getPrioritaet() {
		return prioritaet;
	}
	public void setPrioritaet(Prioritaet prioritaet) {
		this.prioritaet = prioritaet;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}
}

und die dazugehörige Mapping XML

Java:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="database.entitys.Aufgabe"
		table="Aufgabe">
		<id type="java.lang.Long" column="id">
			<generator class="native" />
		</id>
		<property name="name" column="name" type="java.lang.String" />
		<property name="datum" column="datum" type="java.lang.Integer" />
		<property name="zeit" column="zeit" type="java.lang.Integer" />
		<property name="beschreibung" column="beschreibung" type="java.lang.String" />
		<many-to-one name="projekt" class="database.entitys.Projekt" column="projekt" cascade="all" unique="true"/>
		<many-to-one name="prioritaet" class="database.entitys.Prioritaet" column="prioritaet" cascade="all" unique="true"/>
		<many-to-one name="status" class="database.entitys.Status" column="status" cascade="all" unique="true"/>
	</class>
</hibernate-mapping>

Meine Hibernate Config (zur Vollständigkeithalber)
Java:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
      <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.EmbeddedDriver</property>
      <property name="hibernate.connection.url">jdbc:derby:D:/01_Java/07_Workspace_Juno/BOrg/database;create=true</property>
      <property name="hibernate.connection.username"></property>
      <property name="hibernate.connection.password"></property>
      <property name="hibernate.connection.pool_size">10</property>
      <property name="show_sql">true</property>
      <property name="dialect">org.hibernate.dialect.DerbyDialect</property>
      <property name="hibernate.hbm2ddl.auto">update</property>
      <!-- Mapping files -->
       <mapping resource="database/entitys/Aufgabe.hbm.xml"/>
       <mapping resource="database/entitys/Prioritaet.hbm.xml"/>
       <mapping resource="database/entitys/Projekt.hbm.xml"/>
       <mapping resource="database/entitys/Status.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Java:
public void persistAufgabe(Aufgabe aufgabe){
		openSession();
		beginTransaction();
		session.saveOrUpdate(aufgabe);
		commitTransaction();
                closeSession();
	}

private void openSession() {
		this.session = this.sessionFactory.openSession();
	}

private void beginTransaction() {
		this.transaction = this.session.beginTransaction();
	}

	private void commitTransaction() {
		if (this.transaction != null) {
			this.transaction.commit();
		}
	}

	private void closeSession() {
		if (session != null) {
			session.close();
		}
	}

Exception
Java:
Exception in thread "AWT-EventQueue-0" org.hibernate.exception.SQLGrammarException: could not get or update next value
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.engine.TransactionHelper$1Work.doWork(TransactionHelper.java:64)
	at org.hibernate.engine.transaction.Isolater$JdbcDelegate.delegateWork(Isolater.java:211)
	at org.hibernate.engine.transaction.Isolater.doIsolatedWork(Isolater.java:67)
	at org.hibernate.engine.TransactionHelper.doWorkInNewTransaction(TransactionHelper.java:74)
	at org.hibernate.id.TableGenerator.generate(TableGenerator.java:118)

Danke für eure Hilfe.
 
wenn man die Fehlermeldung in Suchmaschinen eintippt wird man als erstes an Sequences/ Id-Erzeugung erinnert, kennst du Sequences?
what is sequence (Database) ? When we need it? - Stack Overflow

schaue ich zu deiner Id-Konfiguration [c]generator class="native"[/c] für Oracle nach, lande ich bei
What does hibernate do with generator class="native" on oracle db? - Stack Overflow

wobei du gar nicht Oracle hast, freudscher Fehler.., das bringt mich jetzt aus dem Konzept 😉

versuche es mal ohne kompliziertes wie einen Generator für Id, vergib selber testweise schlichte Longs, 1, 2, 3, ..
ist dann der Fehler weg?
was du richtig konfigurieren musst für Id-Generator unter Derby, kann ich freilich nicht exakt sagen

edit:
nach
Old Nabble - Apache Derby Users - SEVERE: Table/View 'HIBERNATE_UNIQUE_KEY' does not exist
wird vielleicht HIBERNATE_UNIQUE_KEY benötigt, wobei dann wieder von MySQL die Rede ist, obwohl in einem Derby-Bereich..

edit:
du hast ja
> <property name="show_sql">true</property>
kommt irgendein SQL im Log, zur Query zuvor?
kurz vor dem Fehler dann irgendwas was nach Select einer Id aussieht?
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben