# Hibernate INSERT Problem



## SilentJ (16. Nov 2006)

Moin,

Hibernate wirft bei mir folgende Fehlermeldung aus: 
	
	
	
	





```
org.hibernate.HibernateException: could not determine type of dynamic entity
```

Ich habe zuvor eine hbm.xml-Datei mit folgendem Inhalt erstellt (in Auszügen):


```
<hibernate-mapping auto-import="true" >
	<class name="de.infobench.data.RegularUser"
	entity-name="User" table="regularuser">
		
		<id name="id" unsaved-value="0">
			<generator class="native" />
		</id>
		
		
		<property 
			name="username" 
			column="username" 
			type="string" 
			length="20"
			not-null="true"
		/>
```

Zum Anlegen eines neuen Datensatzes habe ich folgenden Code geschrieben:


```
public RegularUser save(RegularUser ru)
	{
		logger.info("BENUTZER SPEICHERN.");
		Session s = null;
		Transaction tx = null;
		try{
		s = getSessionFactory().openSession();
		tx = s.beginTransaction();
		
		Map newUser = new HashMap();
		newUser.put("username", ru.getUsername());
		newUser.put("password", ru.getPassword());
		newUser.put("title", ru.getTitle());
		newUser.put("firstname", ru.getFirstname());
		newUser.put("name", ru.getName());
		newUser.put("email", ru.getEmail());
		newUser.put("defaultOE", ru.getDefaultOE());
		newUser.put("active", ru.isActive());
		logger.info("USER wird gespeichert");
		s.save(newUser);
		tx.commit();
		
		}catch(HibernateException ex){
			convertHibernateAccessException(ex);
			logger.warn("FEHLER:" + ex);
		}
                ...
```

Ich weiß nicht, wo der Fehler liegt, für Tipps wäre ich sehr dankbar.

Michael


----------



## DreamArtist (16. Nov 2006)

Hallo,

du gibst im Mapping-File an das du den Typ de.infobench.data.RegularUser speichern willst.

in der Methode 
	
	
	
	





```
public RegularUser save(RegularUser ru)
```

versucht du aber eine HashMap zu speichern -->  s.save(newUser) --> newUser = HashMap.

Daher bekommst du von Hibernate den Fehler.

statt newUser.put(Object,Object) nimm ru.setXX.

zum Schluss ruf die Methode s.save(ru auf).

lg Peter


----------



## SilentJ (16. Nov 2006)

Hallo Peter,

vielen Dank für deine Antwort. Ich bin jetzt ein Stück weiter.

In meinem Log taucht nun leider aber eine 
	
	
	
	





```
org.hibernate.MappingException: Unknown entity: de.infobench.data.RegularUser
```
 Exception auf. Ich habe doch alles definitiert. Verdammte Kiste.


----------



## DreamArtist (16. Nov 2006)

Zum einen wenn nicht nötig entity-name="User" im mapping-File entfernen.
Als zweites würde ich den package namen "de.infobench.data.RegularUser" überprüfen

lg Peter


----------



## SlaterB (16. Nov 2006)

selber von Null auf irgendwelchen Kram zusammenzuschreiben ist selten sinnvoll,
warum hat dein Objekt eigentlich 8 Attribute oder noch mehr?
würde nicht eins reichen um erstmal zu testen ob es überhaupt geht?

aber es macht ja in jeder Hinsicht keinen Sinn, das selber zu versuchen,
probiere bitte vorher ein Tutorial

http://www.laliluna.de/first-hibernate-example-tutorial.html

wenn das auch nicht bei dir läuft,
ok, dann kann überlegen, aber dann ist zumindest die Wahrscheinlichkeit irgendwelcher Tippfehler kleiner,

wenn es läuft dann ist alles in Butter, 
dann muss du nur nach und nach Tabellen- und Attributnamen ändern, bis es irgendwann wie deins aussieht


----------



## SilentJ (16. Nov 2006)

Hallo Peter,

jetzt funktioniert es, nur ist jetzt das Problem, dass ich anscheinend bei MySQL nicht mit dem Boolean-Datentyp arbeiten kann.   :x 

Wenn ich in der Administrationsoberfläche für das Feld active Boolean einstellen möchte, macht mir der MySQL-Administrator daraus TINYINT(1). 

Deshalb ist wahrscheinlich auch die Fehlermeldung zu erklären:


```
Incorrect integer value: 'T' for column 'active' at row 1
```

Also irgendwie verstehe ich nicht, warum ich keinen Boolean abspeichern kann.


----------



## DreamArtist (16. Nov 2006)

kannst du schon, musst du nur im Mapping-File auch als solches kennzeichnen.

Bsp.

```
<property   name="prop"
                type="true_false" >
        <column name="prop"  length="1" />
</property>
```

lg Peter


----------



## SilentJ (16. Nov 2006)

Hallo Peter,

das funktioniert nicht bei mir, ich erhalte immer noch die gleiche Fehlermeldung.


```
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
```

Das obrige Code-Fragment dürfte keine Rolle spielen - oder muss ich explizit MySQLInnoDialect angeben?

Vielen Dank für die bisherigen Tipps

Michael


----------



## SilentJ (16. Nov 2006)

Übrigens active ist in meiner Klasse als


```
private boolean active
```
 deklariert.

In der hbm.xml sieht es so aus:


```
<property 
			name="active" 
			type="true_false">
			<column name="active" length="1"></column>
		</property>
```


----------



## KSG9|sebastian (16. Nov 2006)

warum length=1? also wenn ich boolean's abgespeichert hab hat alles wunderbar geklappt..und mysql macht daraus dann eben nen tinyint...


----------



## soulinthemachine (2. Aug 2007)

Just to say 'danke' as I had the same problem with

"could not determine type of dynamic entity"

and that your post (with help of google translate) solved it.

For other english speakers out there, it's caused by entities implementing java.util.Map.  This confuses hibernate and causes it to throw this error when Session.save() is called.  Remove 'implements Map' and everything works fine.


----------



## KSG9|sebastian (3. Aug 2007)

Warum überhaupt einen Typ angeben? Hibernate müsste das auch so kapieren.
Sonst versuch mal mit Objekten zu arbeiten udn gib als Typ java.lang.Boolean an.
Dürfte aber eigenltich kein Problem geeben..


----------

