JSF Hibernate MappingException Unkown Entity

SubSonniC

Mitglied
Hallo,

ja wieder einmal das leidige Thema der Unkown Entities. Ich hab jetzt echt jeden Thread bei Google durch aber keine Lösung gefunden. Danke schon mal im Vorraus.

Ich liste einmal den Quellcode auf.

Das Entity
[JAVA=42]
package org.prometering.mmdemo.models;

import java.io.Serializable;
import java.lang.String;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/**
* Entity implementation class for Entity: User
*
*/
@Entity
@Table(name="Users")
public class User implements Serializable {

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private Long id;
private String firstName;
private String lastName;
private String password;
private static final long serialVersionUID = 1L;

public User() {
}

public String getFirstName() {
return this.firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPassword() {
return this.password;
}

public void setPassword(String password) {
this.password = password;
}

}
[/code]


Die hibernate.cfg.xml

[XML]
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.url">jdbc:postgresql://localhost:5432/prometering</property>
<property name="connection.username">prometering</property>
<property name="connection.password">prometering</property>

<!-- SQL dialect for PostgreSQL -->
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>


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

[/XML]

Noch die Main Klasse

Java:
package org.prometering.test;

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

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.prometering.mmdemo.models.User;
import org.prometering.mmdemo.utils.HibernateUtils;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		 
		    Session session = HibernateUtils.getSessionFactory().openSession();
		    Transaction tx = session.beginTransaction();

		    User user = new User();
		    user.setFirstName("Ich");
		    user.setLastName("Du");
		    user.setPassword("123");

		    session.save(user);
		    tx.commit();
		    
		    session.close();

		  }
}

Und die HibernateUtils

Java:
package org.prometering.mmdemo.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;



public class HibernateUtils {
	private static final SessionFactory sessionFactory;
	static {
		try {
			// Create the SessionFactory from hibernate.cfg.xml
			sessionFactory = new Configuration().configure().buildSessionFactory();
		} catch (Throwable ex) {
			System.err.println("SessionFactory creation failed." + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}


Code:
28.07.2011 11:43:53 org.hibernate.annotations.common.Version <clinit>
INFO: Hibernate Commons Annotations 3.2.0.Final
28.07.2011 11:43:53 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.6.6.Final
28.07.2011 11:43:53 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
28.07.2011 11:43:53 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : javassist
28.07.2011 11:43:53 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
28.07.2011 11:43:53 org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
28.07.2011 11:43:53 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
28.07.2011 11:43:53 org.hibernate.cfg.Configuration doConfigure
INFO: Configured SessionFactory: null
28.07.2011 11:43:53 org.hibernate.cfg.Configuration applyHibernateValidatorLegacyConstraintsOnDDL
INFO: Hibernate Validator not found: ignoring
28.07.2011 11:43:53 org.hibernate.validator.util.Version <clinit>
INFO: Hibernate Validator 4.1.0.Final
28.07.2011 11:43:53 org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
28.07.2011 11:43:53 org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
28.07.2011 11:43:53 org.hibernate.cfg.search.HibernateSearchEventListenerRegister enableHibernateSearch
INFO: Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
28.07.2011 11:43:53 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
28.07.2011 11:43:53 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
28.07.2011 11:43:53 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: false
28.07.2011 11:43:53 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: org.postgresql.Driver at URL: jdbc:postgresql://localhost:5432/prometering
28.07.2011 11:43:53 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=prometering, password=****}
28.07.2011 11:43:54 org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.PostgreSQLDialect
28.07.2011 11:43:54 org.hibernate.engine.jdbc.JdbcSupportLoader useContextualLobCreation
INFO: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Database ->
       name : PostgreSQL
    version : 9.0.4
      major : 9
      minor : 0
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Driver ->
       name : PostgreSQL Native Driver
    version : PostgreSQL 9.0 JDBC4 (build 801)
      major : 9
      minor : 0
28.07.2011 11:43:54 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Using default transaction strategy (direct JDBC transactions)
28.07.2011 11:43:54 org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch size: 15
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch updates for versioned data: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: enabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): enabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL inserts for batching: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
28.07.2011 11:43:54 org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
INFO: Using ASTQueryTranslatorFactory
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JPA-QL strict compliance: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory createRegionFactory
INFO: Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge
28.07.2011 11:43:54 org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge <init>
INFO: Cache provider: org.hibernate.cache.NoCacheProvider
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Echoing all SQL to stdout
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
28.07.2011 11:43:54 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Check Nullability in Core (should be disabled when Bean Validation is on): disabled
28.07.2011 11:43:54 org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
28.07.2011 11:43:54 org.hibernate.type.BasicTypeRegistry register
INFO: Type registration [materialized_blob] overrides previous : org.hibernate.type.MaterializedBlobType@8542529
28.07.2011 11:43:54 org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured
28.07.2011 11:43:54 org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
28.07.2011 11:43:54 org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
28.07.2011 11:43:54 org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: Running hbm2ddl schema export
28.07.2011 11:43:54 org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: exporting generated schema to database
28.07.2011 11:43:54 org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: schema export complete
Exception in thread "main" org.hibernate.MappingException: Unknown entity: org.prometering.mmdemo.models.User
	at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:693)
	at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1485)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
	at org.prometering.test.Test.main(Test.java:29)
 
S

SlaterB

Gast
denkst du dir jede einzelne Zeile aus oder folgst du einem verlässlichen Tutorial/ sonst irgendetwas korrektem?
in
Hibernate Annotations
lese ich jedenfalls

The next change [im Vergleich zu ohne Annotations] you need to do here is, instead of adding the .hbm.xml file to the hibernate.cfg.xml file, we add the fully qualified name of the annotated class to the mapping element.

[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>
[..]
<mapping class="[Klassenname mit package]" />
</session-factory>
</hibernate-configuration>
[/xml]


edit:
dahinter übrigens noch
The SessionFactory should be configured using the AnnotationConfiguration object instead of the Configuration object used with XML mappings.
aber vielleicht nicht so wichtig
 
Zuletzt bearbeitet von einem Moderator:

SubSonniC

Mitglied
Hmm das versteh ich nicht. Ich habe überall gelesen, das das Mapping mit Annotations vorgenommen werden kann und somit die explizite Angabe in der Konfiguration wegfällt.

Aber mit der Angabe von <mapping>...</mapping> hat sich das Problem erledigt.

AnnotationConfiguration ist deprecated in Hibernate 3.6.6. Daher auch nur Configuration.

Boah und dafür hab ich jetzt einen ganzen Tag versaut.

Danke
 
S

SlaterB

Gast
> Ich habe überall gelesen,
wäre schön wenn du konkreter wirst, welche Quellen?

ich habe noch bisschen weiter geschaut, das gibts ja so oft im Internet und auch in so vielen Versionen, Annotations oder nicht,
oft nicht besonders übersichtlich,

aber wenn es mal ein komplettes Beispiel ist, dann scheint die konkrete Angabe der Klassen immer dabei zu sein
etwa auch
An Introduction to Hibernate 3 Annotations - O'Reilly Media
mit der Spring-Variante
[xml]
<!-- Hibernate session factory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
[..]
<property name="annotatedClasses">
<list>
<value>com.onjava.modelplanes.domain.PlaneType</value>
<value>com.onjava.modelplanes.domain.ModelPlane</value>
...
</list>
</property>
</bean>
[/xml]
 

Ähnliche Java Themen

Neue Themen


Oben