Hibernate - Exception bei insert

Code:
package at.pcd.wam.technologie.test;

import org.hibernate.Session;
import org.hibernate.Transaction;

import at.pcd.bitte.MyAddressModel;
import at.pcd.wam.technologie.hibernate.utility.HibernateUtil;

public class TestHibernate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Session session = HibernateUtil.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		MyAddressModel my = new MyAddressModel();
		my.setAenderung(null);
		my.setAnforderung(null);
		my.setBahnhof("Bahnof");
		my.setBeschreibung("Beschreibung");
		my.setCc("AT");
		my.setEar(null);
		my.setEmail("EMAIL");
		my.setErstellt(null);
		my.setFunktion("Funkion");
		my.setGeburtsdatum(null);
		my.setGeo(null);
		my.setGeoLat(null);
		my.setGeoLong(null);
		my.setGeoX(null);
		my.setGeoY(null);
		my.setGeschlecht("Geschlecht");
		my.setGueltig(null);
		my.setGuid("GUID"); //
		my.setHtmlmail(null);
		my.setId(1); //FIXME setzen?
		my.setMobiltel(null);
		my.setNichtDeutsch(null);
		my.setNRekey01(null);
		my.setNrid5(null);
		my.setOrganisation(null);
		my.setOrt(null);
		my.setPlz(null);
		my.setReview(null);
		my.setRid1(null);
		my.setRid2(null);
		my.setRid3(null);
		my.setRid4(null);
		my.setSkype(null);
		my.setSpam(null);
		my.setStrasse(null);
		my.setTelefon(null);
		my.setTitel(null);
		my.setVorname(null);
		my.setWeb(null);
		my.setZuname(null);
		
		session.save(my);
		
		/* funktioniert - aus db lesen */
//		ArrayList<AdvancedAddressModel> aModel = (ArrayList<AdvancedAddressModel>)
//			session.createQuery("select id, countryCode from AdvancedAddressModel").list();
		//***
		
		tx.commit();
	}
}

Somit wären wirklich alle Felder mit Werten abgedeckt, jedoch bekomme ich nach wie vor folgende Fehlermeldung:
29.05.2007 11:28:29 org.hibernate.util.JDBCExceptionReporter logExceptions
SCHWERWIEGEND: Wert für Parameternummer "40" wurde nicht festgelegt.
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [at.pcd.bitte.MyAddressModel]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy0.save(Unknown Source)
at at.pcd.wam.technologie.test.TestHibernate.main(TestHibernate.java:61)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Wert für Parameternummer "40" wurde nicht festgelegt.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.buildParamTypeDefinitions(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PreparedStatementExecutionRequest.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
... 22 more

Wenn man folgendem trauen darf ist Parameter 40 die ID:
Hibernate: insert into spc.dbo.JAVA_TEST_HIBERNATE (AENDERUNG, ANFORDERUNG, BAHNHOF, BESCHREIBUNG, CC, EAR, EMAIL, ERSTELLT, FUNKTION, GEBURTSDATUM, GEO, GEO_LAT, GEO_LONG, GEO_X, GEO_Y, GESCHLECHT, GUELTIG, GUID, HTMLMAIL, MOBILTEL, NICHTDEUTSCH, N_REKEY01, NRID5, ORGANISTAION, ORT, PLZ, REVIEW, RID1, RID2, RID3, RID4, SKYPE, SPAM, STRASSE, TELEFON, TITEL, VORNAME, WEB, ZUNAME, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Doch die sollte doch "identity" sein und somit nicht von mir versorgt werden?


**EDIT**
Mittlerweile habe ich es zum Laufen gebracht, habe statt "identity" "increment" benutzt (bei meiner Test Tabelle) und dann funktioniert es - nun stellt sich halt die Frage wie ich dies konfigurieren soll wenn das Feld in der bestehenden DB als "identifier" deklariert ist..
 
Zuletzt bearbeitet:
als generator class muss man assigned verwenden, wenn der schlüssel vom benutzer vorgegeben wird

identity/sequence steht für die abbildung auf entsprechende DB-konsturkte in SQLServer, da wird dann nicht deine id vergeben

jetzt stellt sich natürlich die frage, warum du als DB id nicht einfach einen schlüssel generien lässt und die ID deines objektes in einer normalen spalte ablegst

die objekt id hat ja mit der DB id nix zu tun, und diese könnten also auch unabhängig voneinander sein

ich würde deine ObjektID als normalen wert abspeichern und die DB von hibernate erzeugen lassen
 
Die ID wird eh von der DB vergeben!
Bedeutet das nun dass ich jene bei bspw einem Insert Statement weglassen kann?
 

Neue Beiträge

Zurück