# Hibernate - Ein Referenziertes Objekt mit Sprichern



## SaschaLR (9. Jul 2007)

Hallo,

ich habe folgenden Wunsch. Ein Objekt der Klasse Case referenziert genau ein Objekt der Klasse User. Ich habe für bei Klassen funktionierende Mappings.

Jetzt möchte ich den User, der vom Case referenziert wird, auch abspeichern, wenn ich den Case speicher.

Irgendwie funktioniert das aber nicht und es gibt keine Fehler die mir auffallen. 

Hier der 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.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3307/</property>
		<property name="hibernate.connection.username">reqlist</property>
		<property name="hibernate.connection.password">xxx</property>
		<property name="hibernate.default_schema">reqlist</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="current_session_context_class">thread</property>
		<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
		<property name="show_sql">true</property>
		<property name="hbm2ddl.auto">update</property> 
		<mapping resource="./org/p/reqlist/beans/User.hbm.xml" />
		<mapping resource="./org/p/reqlist/beans/Case.hbm.xml" />
	</session-factory>
</hibernate-configuration>
```


```
<?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 package="org.p.reqlist.beans">
	<class name="Case" table="CASE_TABLE">
		<id name="id" column="CASE_ID">
			<generator class="increment" />
		</id>
		<property name="title" column="CASE_TITLE" />
		<property name="caseMessage" column="CASE_MESSAGE" />
		<property name="caseNr" column="CASE_NR" />
		<property name="closed" column="CASE_CLOSED" />
		<property name="createDate" column="CASE_CREATE_DATED" />
		<one-to-one name="reportedBy" class="org.p.reqlist.beans.User" cascade="all" />
	</class>
</hibernate-mapping>
```


```
<?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 package="org.p.reqlist.beans">
  <class name="User" table="USER_TABLE">
	<id name="id" column="USER_ID">
		<generator class="native" />
	</id>
	<property name="name" column="USER_NAME" />
	<property name="email" column="USER_EMAIL"  />
	<property name="active" column="USER_ACTIVE" />
  </class>
</hibernate-mapping>
```
Hat jemand eine Idee wieso es nicht geht, bzw. wie ich es zum rennen bekomme?

Danke,
Sascha


----------



## dr-oetker (10. Jul 2007)

SaschaLR hat gesagt.:
			
		

> Irgendwie funktioniert das aber nicht...


Ginge das vielleicht ein bißchen genauer?


----------



## SaschaLR (10. Jul 2007)

Ja, geht genauer! 

Ich denke, um die Referenz hinzubekommen muss eine Extra-Spalte oder -Tablle in der DB angelegt werden. Passiert aber nicht. Und ich bekomme an der Stelle auch nicht das User-Objekt zurück... was genau zurückkommt muß ich nochmal nachsehen. Aber bisher meine ich es werden die User der Reihe nach auf der JSP ausgegeben (In der Reihenfolge, in der sie angelegt wurden). War heute nicht mehr dran, deswegen weiß ich nicht so ganz genau...schaue aber mal nach.


----------



## dr-oetker (11. Jul 2007)

Ich empfehl Dir mal

http://www.hibernate.org/hib_docs/reference/en/html/index.html

insbesondere Kap. 5 dürfte interessant sein. Und so wie ich diesen Satz "Primary key associations don't need an extra table column;..." verstehe, ist es auch nicht unbedingt nötig, daß in der DB eine Extra-Spalte angelegt wird.

Ansonsten: Taucht denn der User in der DB gar nicht auf? Gibts ne Fehlermeldung beim Speichern?


----------



## SaschaLR (11. Jul 2007)

Hi,

Der User ist in der DB .. kein Problem an der Stelle. In meiner App kann ich User anlegen und bearbeiten ... das geht alles.

ich hab noch was gefunden. Ich denke ich müsste woh leher many-to-one nehmen... icht on-to-one ... probiere ich aus und melde mich.

Bis in Kürze...


----------



## SaschaLR (11. Jul 2007)

Hallo,

meine Idee war richtig. 

Es hätte many-to-one sein müssen, und ein lazy="false" hilft dann auch weiter.



```
<many-to-one name="reportedBy" class="org.p.reqlist.beans.User" column="CASE_REPORTED_BY" lazy="false" />
```

many-to-one daher, da beliebig viele Case-Objekte mit einem User-Objekt zu tun haben können.

Gruß, Sascha


----------

