# org.hibernate.MappingException: Unknown entity



## 0knowledge (24. Jun 2008)

Ich bin nach einer Anleitung im Web vorgegangen um ein Beispielprojekt mit Java 5 SE und Hibernate zu erstellen. Leider erzeugt die ausführung nur folgenden Fehler





> Exception in thread "main" org.hibernate.MappingException: Unknown entity: artikel
> at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:550)
> at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338)
> at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:180)
> ...


Die wichtigsten Codefragmente sind
start.java
	
	
	
	





```
import org.hibernate.*;
public class start {
	public static void main(String[] args) {
		artikel test = new artikel();
		test.setPreis(30.25);
		test.setSteuer(7.25);
	    Session session = HibernateUtil.getSessionFactory().openSession();
	    Transaction tx = session.beginTransaction();
	    session.persist(test);
	    tx.commit();
	    session.close();
	}
}
```
HibernateUtil.java
	
	
	
	





```
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {
  private static final SessionFactory sessionFactory;

  static {
    try {
      sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    } catch (Throwable ex) {
      System.err.println("Initial SessionFactory creation failed." + ex);
      throw new ExceptionInInitializerError(ex);
    }
  }

  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}
```
artikel.java
	
	
	
	





```
import javax.persistence.Id;
import org.hibernate.annotations.Entity;
import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;
import org.hibernate.annotations.Table;

@Entity
@Table(appliesTo="t1")
public class artikel {

	@Id
	@Generated(value=GenerationTime.INSERT)
	private long id;
	private String name;
	private String beschr;
	private double preis;
	private double steuer;

	public artikel() {}
	
	<getter und setter>
}
```
und die hibernate.cfg.xml
	
	
	
	





```
<?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="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://<IP>/test1</property>
    <property name="connection.username">testuser</property>
    <property name="connection.password">xxxxxxxxxx</property>
    <property name="connection.pool_size">1</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <property name="show_sql">true</property>
    <mapping class="artikel"/>
  </session-factory>
</hibernate-configuration>
```
Wo liegt hier der Fehler  :?: Die Klasse artikel ist doch eindeutig als Entity definiert.


----------



## byte (24. Jun 2008)

Du musst den voll qualifizierten Namen der Klasse im Mapping angeben, also inkl. Package-Angabe.


----------



## 0knowledge (24. Jun 2008)

Danke für deine Hilfe.
Ich habe für dieses mini Projekt kein package erstellt, daher sollte die Angabe so richtig sein. Sobald ich die mapping Zeile verändere kommt es auch zu einem neuen Fehler der Art





> Initial SessionFactory creation failed.org.hibernate.MappingException: Unable to load class declared as <mapping class=".artikel"/> in the configuration:
> Exception in thread "main" java.lang.ExceptionInInitializerError


----------



## SnooP (25. Jun 2008)

was ist .artikel? Wenn dann artikel - und Klassennamen sollten groß geschrieben werden


----------



## 0knowledge (25. Jun 2008)

.artikel ist nur ein Beispiel um zu zeigen das der Fehler im Ursprungsposting wahrscheinlich nicht in der Zeile





> <mapping class="artikel"/>


liegt. Sicher ist es sinnvoll Klassennamen groß zu schreiben, da ich es hier aber nicht gemacht habe steht der Name natürlich auch klein in der hibernate.cfg.xml.


----------



## byte (25. Jun 2008)

Der neue Fehler könnte auch daher kommen, dass .artikel nicht mal ein gültiger Klassenbezeichner ist. :autsch:

Ich kann auch nur mutmaßen, dass es am Default-Package liegt. Man sollte in Java generell *nie* mit Default-Package arbeiten. Ändere das also mal, schreib gleich den Klassennamen groß, wie es sich gehört und dann schaun wir weiter. Der Rest sieht sonst nämlich ok aus auf den ersten Blick.


----------



## 0knowledge (25. Jun 2008)

Alle *.java Dateien in Package t1 zusammengefasst 
	
	
	
	





```
<mapping class="t1.Artikel"/>
```
 leider bleibt der Fehler der gleiche.





> Exception in thread "main" org.hibernate.MappingException: Unknown entity: t1.Artikel
> at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:550)
> at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338)
> at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:180)
> ...


Sonst noch irgentwelche Ideen  ???:L


----------



## adi.b (16. Aug 2008)

Hallo, gibt es mittlerweile eine Lösung? Bin beim googeln auf diesen Eintrag gestoßen und stehe vor dem gleichen Problem. Ich habe die gemappte Klasse in einem Package und beim Mapping den voll qualifizierten Namen angegeben...
Danke!


----------



## adi.b (16. Aug 2008)

Hab die Lösung bzw. den Fehler gefunden und möchte sie der Welt nicht vorenthalten:

@Entity muss @javax.persitence.Entity sein, also der import muss dann lauten:


```
import javax.persistence.Entity;
```



> @org.hibernate.annotations.Entity [...] ist eine Erweiterung zu @javax.persistence.Entity und kann *nur zusätzlich* verwendet werden [...]


 (aus "Sebastian Hennebrüder; Hibernate - Das Praxisbuch für Entwickler; Galileo Computing; 2007")

Beispiel:

```
import java.io.Serializable;

import javax.persistence.Entity
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.SequenceGenerator;

@Entity
@org.hibernate.annotations.Entity(mutable=true, dynamicInsert=true, dynamicUpdate=true)
@SequenceGenerator(name="myclass_seq", sequenceName="myclass_id_seq")
public class MyClass implements Serializable {

    private static final long serialVersionUID = 7628430776579817658L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "myclass_seq")
    private Long id;
    private String name;

// ...

}
```


----------

