Hibernate - Exception bei insert

Hallo,
vllt. kein Fehler aber ich würde zumindest mal die hibernate.cfg.xml aufräumen
Code:
<?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="hibernate.connection.driver_class">
		com.microsoft.jdbc.sqlserver.SQLServerDriver
	</property>
	<property name="connection.username">sa</property>
	<property name="hibernate.connection.password">jhcbxr</property>
	<property name="hibernate.connection.url">
		jdbc:microsoft:sqlserver://mag2;DatabaseName=sbc
	</property>
	<property name="myeclipse.connection.profile">mag2-sa</property>
	<property name="hibernate.dialect">
		org.hibernate.dialect.SQLServerDialect
	</property>
	<!-- Enable Hibernate's automatic session context management -->
	<property name="current_session_context_class">thread</property>
	<mapping
		resource="at/pcd/wam/technologie/model/AdvancedAddressModel.hbm.xml" />

</session-factory>
</hibernate-configuration>

und dann noch folgende properties hinzufügen:
Code:
<property name="hibernate.hbm2ddl.auto" value="update"></property>
<property name="hibernate.show.sql" value="true"></property>
hbm2dll.auto - legt mit "update" die Tabellen sofern nicht vorhanden an
show.sql - zeigt den SQL-Code von Hibernate an

Dann zu deinem Model:
Java:
public AdvancedAddressModel(final String street, final String houseNumber, final String zip, final String locality, final String country) {
    this.street = street;
    this.houseNumber = houseNumber;
    this.zip = zip;		
    this.locality = locality;
    this.country = country;
}

werden die Variablen in der Klasse AbstractGeoModel deklariert? Sind dort auch getter- und setter-Methoden vorhanden?

Gruß
BlackMagician
 
Hi!
Also die hibernate.cfg wurde mir ja vom Eclipse Plugin so erzeugt - werde aber "zusammenräumen". Weiters gibt es in der abstrakten Klasse getter/setter. Ich denke mein Problem ist dass es in meinem Model einfach nicht alle Columns gibt die es in der Tabelle gibt und dass dann beim Einfügen von Null Werten Hibernate ja nicht alle Columns kennt - Kann das sein?

Sprich Tabelle A hat 3 Columns (b,c,d) und ich habe in meinem Model jedoch nur b und c abgebildet und wenn ich nun ein Insert machen möchte kennt er die Spalte d nicht.

Werds mal ausprobieren.

mfg
 
daran liegt es nicht, hibernate erzeugt ja deine tabelle nicht nach dem objekt, sondern nach der config

wenn deine config nur sagt, speicher attribute x1 und x4 in die Tabelle tabelle1, dann werden in tabelle1 nur spalten für x1 und x2 erstellt.

wenn die tabelle dann schon in der DB ist, und beim nächsten mal speicherst du x1, x4 und x5 dann hast ein kleines problem, das hibernate die tabelle nicht löschen kann, weil die alte nicht wie die neue mit 3 spalten ist, dann muss sie händisch gelöscht werden

das ist mal nur ein kleiner hinweis, ist aber hier noch nicht der fall

ich tippe eher auf ein problem mit der DB
läuft die DB sicher, und kannst du darauf zugreifen?
gib dir auch mal wie von blackmagician beschrieben die SQL statements aus

mfg
 
Die Tabelle existiert ja schon! Sprich die soll nicht von Hibernate generiert werden sondern bestehende Einträge ergänzen/ändern. Mittlerweile habe ich es auch schon geschafft ein Insert auf eine eigens angelegte Dummy-Tabelle durchzuführen. Nun teste ich es wie oben beschrieben an jener Tabelle die Schwierigkeiten macht.
 
Frage:
+) Wofür benötige ich folgendes: discriminator-value="0"

man kann ja klassen von anderen klassen ableiten

natürlich kann man auch diese in hibernate abbilden, dafür gibts verschiedene möglichkeiten

1a) eine tabelle pro konkreter klasse mit impliziten polymorphismus
1b) eine tabelle pro konkreter klasse mit union operationen
2) eine tablle für gesamte Klassenhierarchie
3) eine tabelle pro klasse

bei 2) braucht man discriminator und discriminator-value
discriminator: spalte, die definiert, von welchen typ eine spalte tatsächlich ist
discriminator-value: unterscheidungsmerkal für konkrete klasse

angenommen du hast "angestellte", und davon abgeleitet, "fix angestellte" und "temp. angestellte"

dann kommt sowas ca. raus
<discriminator column="employeeType" type="string"/>
<property name="name"/>
<subclass name="PermanentEmployee" discriminiator-value="P">
<property name="salary"/>
</subclass>
<subclass name="TemporaryEmployee" discriminiator-value="T">
<property name="hours worked"/>
</subclass>

in deiner tabelle sieht das dann so aus

P Heinz 1500€ null
T Franz null 12

mit dem discriminator kann hibernate zwischen den klassen unterscheiden

lg
 
Die Tabelle existiert ja schon! Sprich die soll nicht von Hibernate generiert werden sondern bestehende Einträge ergänzen/ändern. Mittlerweile habe ich es auch schon geschafft ein Insert auf eine eigens angelegte Dummy-Tabelle durchzuführen. Nun teste ich es wie oben beschrieben an jener Tabelle die Schwierigkeiten macht.

dann schau dir mal die hibernate statements an

es liegt wohl dann darin, das du x y einfügst, aber eine zeile noch ein z hat, da musst du dann ein statement generieren, das x, y, null einfügt
 
mittels session.createQuery

ist am anfang nicht ganz durchsichtig, da hier HQL verwendet wird, schau dirs am besten mit beispielen von der dokumentation an ;)

ps. auf seite 1 ganz unten habe ich noch kurz diskriminator erklärt, falls du das übersehen haben solltest ;)
 
Jo das mit dem Diskriminator hab ich gelesen - danke.

Also kann es nun sein dass wenn ich in einer bestehenden Tabelle ein Insert mache und Hibernate nicht alle Spalten dieser Tabelle kennt dass dann deshalb die Exception:
29.05.2007 08:58:25 org.hibernate.util.JDBCExceptionReporter logExceptions
SCHWERWIEGEND: Wert für Parameternummer "6" wurde nicht festgelegt.
auftritt?

Oder hat es etwas mit meiner abstrakten Klasse zu tun? In jener habe ich eben ein "paar" Tabellen Spalten sowie deren getter und setter als auch konstruktoren.

Wenn mein Primärschlüssel in der Tabelle ein identifier ist, muss ich ja den Wert nicht selbst setzen (Frage deshalb weil er ja schreit dass ein Parameter Wert nicht gesetzt wurde)?
 
gib dir einmal die generierten sql statements aus, und dann schau sie dir mal an

poste eventuel das statement hier, und auch die dazugehörige DB tabelle

dann können wir mal schauen, obs daran liegt oder nicht

aber hört sich für mich so an, als willst du eben eine zeile einfügen, in der nicht alle werte vorhanden sind, sieht man dann im sql statement
 

Neue Beiträge

Zurück