# Hibernate, jpa, EntityManager etc.



## Sneakizzel (1. Mai 2011)

Mahlzeit zusammen,

ich versuch' mich gerade mit hibernate, jpa, entitymanager etc. und hab folgendes Problem:

```
0 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.4.0.GA
Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
	at org.hibernate.type.BasicTypeRegistry.<init>(BasicTypeRegistry.java:94)
	at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:59)
	at org.hibernate.cfg.Configuration.<init>(Configuration.java:250)
	at org.hibernate.cfg.Configuration.<init>(Configuration.java:302)
	at org.hibernate.cfg.AnnotationConfiguration.<init>(AnnotationConfiguration.java:108)
	at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:107)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:124)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
	at database.InsertExample.main(InsertExample.java:18)
```
Ich bin mir sicher das dieses Beispiel schonmal funktionierte und weiss jetzt zum verrecken nicht warum es
jetzt nicht mehr tur. Er schmeisst die Exception sofor am Anfang meiner Test Klasse:


```
package database;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;



public class InsertExample {
	
	public static void main(String[] args) {
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence");
		
		EntityManager manager = emf.createEntityManager();
		
		EntityTransaction tx = manager.getTransaction();

		...
```

hier meine persistence.xml
[xml]
?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Persistenz Descriptor zur Konfiguration -->
<persistence>

  <!-- Hinterlegen eines symbolischen Namens -->
  <persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL">

    <!-- Zu verwendende Implementierung -->
    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <!-- Persistierbare Klassen -->
    <class>photo.database.Directory</class> 

    <!-- Konfiguration der Hibernate Implementierung -->
    <properties>
      <!-- Name des intern verwendeten JDBC-Treibers -->
      <property name="hibernate.connection.driver_class"  value="org.hsqldb.jdbcDriver"/> 

      <!-- URL der zu verwendenden Datenbank -->
      <property name="hibernate.connection.url"  value="jdbc:hsqldb:testDB"/> 

      <!-- SQL-Dialect, den Hibernate verwenden soll -->
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>

      <!-- Benutzername und Passwort; Standardwerte der HSQLDB -->
      <property name="hibernate.connection.username" value="SA"/> 
      <property name="hibernate.connection.password" value=""/> 

      <!-- Flag, ob Tabellen automatisch erzeugt werden sollen -->
      <property name="hibernate.hbm2ddl.auto" value="create"/> 

      <!-- Flag, ob SQL-Statements ausgegeben werden sollen -->
      <property name="hibernate.show_sql" value="true"/> 
    </properties>
  </persistence-unit>
</persistence>
[/xml]
Und zum Schluss noch meine libs:

antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate3.jar
hibernate-annotations-3.4.0.GA.jar
hibernate-entitymanager-3.4.0.GA.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
hsqldb.jar
javassist-3.12.0.GA.jar
javax.persistence_2.0.0.jar
jta-1.1.jar
jta-1.1.jar
slf4j-simple-1.6.1.jar

So, dann hoffe ich mal das mir einer von Euch helfen kann ;-)
Grüße sneakizzel


----------



## computersport (1. Mai 2011)

Moin,

zeig mal die Entität die du in der Persistence.xml mappst.

Ich würd vermuten das der Fehler evtl. dort begraben liegt aufgrund von "java.lang.NoSuchFieldError"

grützi


----------



## Sneakizzel (2. Mai 2011)

Moin,

hier ist die entity:


```
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "dir")
public class Directory {

	// Variablen die den Attributen der Tabelle entsprechen
	private int did;

	private String dname;
	private int fatherid;
	private int entries;

	public Directory() {
	}

	/**
	 * Konstruktor mit Initialisierung der Variablen
	 */
	public Directory(int did, String dname, int fatherid, int entries) {
		this.did = did;
		this.dname = dname;
		this.fatherid = fatherid;
		this.entries = entries;
	}

	@Id
	@Column(name = "id")
	public int getDid() {
		return did;
	}

	public void setDid(int did) {
		this.did = did;
	}

	@Column(name = "dname", nullable = false)
	public String getDname() {
		return dname;
	}

	public void setDname(String dname) {
		this.dname = dname;
	}

	@Column(name = "fatherid")
	public int getFatherid() {
		return fatherid;
	}

	public void setFatherid(int fatherid) {
		this.fatherid = fatherid;
	}

	@Column(name = "entries")
	public int getEntries() {
		return entries;
	}

	public void setEntries(int entries) {
		this.entries = entries;
	}

	public String toString() {
		return "Directory[id:" + did + ", name:" + dname + "]";
	}
}
```

PS. Vielleicht kennt jemand ein gutes Tutorial zu diesem Thema.

Grüße Sneakizzel


----------



## computersport (2. Mai 2011)

Hmm Poste bitte nochmal den Insert. Will mal sehen was du da gemacht hast.
Ach und mit was für einer Datenbank arbeitest du?


----------



## Sneakizzel (2. Mai 2011)

OK, als DB nutze ich die HSQLDB und hier ist meine Testklasse:


```
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;



public class InsertExample {
	
	public static void main(String[] args) {
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence");
		EntityManager manager = emf.createEntityManager();
		EntityTransaction tx = manager.getTransaction();
		tx.begin();

		//Erzeugen eines neuen JavaObjektes
		Directory dir = new Directory();
		dir.setDid(0);
		dir.setDname("temp");

		//Speichern des JavaObjektes mit Hilfe des EntityManagers
		manager.persist(dir);

		//Abschluss der Transaktion mit einem Commit
		tx.commit();
		
		/**
		 * 
		 */
		
		//Laden des Directory-Objektes mit der Id=0
		Directory retDir = manager.find(Directory.class, 0);
		System.out.println("retDir:" + retDir);
		
		tx.begin();
		
		 if (retDir != null) {
			//Löschen des Datensatzes aus der Datenbank
			manager.remove(retDir); 
		 }

		 //Abschluss der Transaktion mit einem Commit
		 tx.commit();

	
		//Laden des Directory-Objektes mit der Id=0
		Directory retDir2 = manager.find(Directory.class, 0);
		if(retDir2 == null){
			System.out.println("retDir2 is null");
		} else {
			System.out.println("retDir2:" + retDir2);
		}
		
		
		//Freigabe der Ressourcen des EntityManagers
		manager.close();

		//Schließen der EntityManagerFactory und Freigeben der
		//belegten Ressourcen
		emf.close();
	}
}
```


----------



## maki (2. Mai 2011)

Laut Google kommt es z diesem Fehler, wenn du verschiedene Version der JArs mischt.


```
hibernate3.jar
hibernate-annotations-3.4.0.GA.jar
hibernate-entitymanager-3.4.0.GA.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
```
Hast du die selber so zusammengestellt,  oder Maven2 bzw. einfach den kompletten Hibernate Release runtergeladen?
In ersterem Falle würde ich das mal korrigieren.


----------



## Sneakizzel (2. Mai 2011)

Hallo maki,

super tipp, hab eigentlich alles richtig zusammen gehabt, musste nur hibernate-annotations-3.4.0.GA.jar löschen und siehe da es funzt. Jetzt muss ich nur noch rausfinden warum ich dieses jar mal hinzugefügt habe.

Trotzdem erstmal DANKE :-D


----------

