hibernate mapping problem

Scorpe

Grünschnabel
hallo,

folgende ausgangssituation:

- benutze myeclipse, mysql-db
- kardinalität der zu mappenden tabellen: m zu n
- also insgesamt 3 tabellen(je eine für die beiden entitäten und eine für die foreign keys)

ich habe jetzt ein kleines test-programm geschrieben, welches entsprechend datensätze in die tabellen schreiben soll.

HibernateSessionFactory
Code:
mport org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution.  Follows the Thread Local Session
 * pattern, see {@link http://hibernate.org/42.html}.
 */
public class HibernateSessionFactory {

    /** 
     * Location of hibernate.cfg.xml file.
     * NOTICE: Location should be on the classpath as Hibernate uses
     * #resourceAsStream style lookup for its configuration file. That
     * is place the config file in a Java package - the default location
     * is the default Java package.<br><br>
     * Examples: <br>
     * <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml". 
     * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code> 
     */
    private static String CONFIG_FILE_LOCATION = "/hibernate/hibernate.cfg.xml";

    /** Holds a single instance of Session */
    private static final ThreadLocal threadLocal = new ThreadLocal();

    /** The single instance of hibernate configuration */
    private static final Configuration cfg = new Configuration();

    /** The single instance of hibernate SessionFactory */
    private static org.hibernate.SessionFactory sessionFactory;

    /**
     * Returns the ThreadLocal Session instance.  Lazy initialize
     * the <code>SessionFactory</code> if needed.
     *
     *  @return Session
     *  @throws HibernateException
     */
    public static Session currentSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

        if (session == null) {
            if (sessionFactory == null) {
                try {
                    cfg.configure(CONFIG_FILE_LOCATION);
                    sessionFactory = cfg.buildSessionFactory();
                }
                catch (Exception e) {
                    System.err.println("%%%% Error Creating SessionFactory %%%%");
                    e.printStackTrace();
                }
            }
            session = sessionFactory.openSession();
            threadLocal.set(session);
        }

        return session;
    }

    /**
     *  Close the single hibernate session instance.
     *
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);

        if (session != null) {
            session.close();
        }
    }

    /**
     * Default constructor.
     */
    private HibernateSessionFactory() {
    }

}


HibernateTest
Code:
mport org.hibernate.*;
import java.util.*;

public class HibernateTest
{
	public static void main(String[] args)
	{
		// Step 1 - Create a new entity
		//User user = new User();
		// Step 2 - Set message field
		//user.setName("6th_user");
		//user.setLogin("login6");
		//user.setPassword("passwd6");
		
		//RoleUser r_u = new RoleUser();
		//r_u.setRole();
		//r_u.setUser(user);
		
		//Set r_u_set = new HashSet();
		//r_u_set.add(user);

		try
		{
			// Step 3 - Get a Hibernate Session
			Session session = HibernateSessionFactory.currentSession();
			// Step 4 - Persist entity to database
			Transaction tx = session.beginTransaction();
			//session.save(user);
			tx.commit();
			System.out.println("Save successful.");
		}
		catch (HibernateException e)
		{
			System.out.println("Save failed.");
		}
		finally
		{
			try
			{
				// Step 5 - close the session
				HibernateSessionFactory.closeSession();
			}
			catch (HibernateException e1)
			{
				// do nothing
			}
		}
	}
}

jedoch bekomme ich folgende exceptions:

Code:
(cfg.Environment                     464 ) Hibernate 3.0.5
(cfg.Environment                     477 ) hibernate.properties not found
(cfg.Environment                     510 ) using CGLIB reflection optimizer
(cfg.Environment                     540 ) using JDK 1.4 java.sql.Timestamp handling
(cfg.Configuration                   1110) configuring from resource: /hibernate/hibernate.cfg.xml
(cfg.Configuration                   1081) Configuration resource: /hibernate/hibernate.cfg.xml
(cfg.Configuration                   444 ) Mapping resource: hibernate/RoleUser.hbm.xml
(cfg.HbmBinder                       260 ) Mapping class: hibernate.RoleUser -> role_user
(cfg.Configuration                   444 ) Mapping resource: hibernate/Role.hbm.xml
(cfg.HbmBinder                       260 ) Mapping class: hibernate.Role -> role
(cfg.Configuration                   444 ) Mapping resource: hibernate/User.hbm.xml
(cfg.HbmBinder                       260 ) Mapping class: hibernate.User -> user
(cfg.Configuration                   1222) Configured SessionFactory: null
(cfg.Configuration                   875 ) processing extends queue
(cfg.Configuration                   879 ) processing collection mappings
%%%% Error Creating SessionFactory %%%%
org.hibernate.MappingException: Association references unmapped class: hibernate.Object
	at org.hibernate.cfg.HbmBinder.bindCollectionSecondPass(HbmBinder.java:2036)
	at org.hibernate.cfg.HbmBinder$CollectionSecondPass.secondPass(HbmBinder.java:2497)
	at org.hibernate.cfg.HbmBinder$SecondPass.doSecondPass(HbmBinder.java:2468)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:884)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:999)
	at hibernate.HibernateSessionFactory.currentSession(HibernateSessionFactory.java:49)
	at hibernate.HibernateTest.main(HibernateTest.java:27)
Exception in thread "main" java.lang.NullPointerException
	at hibernate.HibernateSessionFactory.currentSession(HibernateSessionFactory.java:56)
	at hibernate.HibernateTest.main(HibernateTest.java:27)

könnt ihr mir helfen?
 
ist user eine deiner tabellen?

mit my eclipse kannst du dir die mappings automatisch generieren lassen, hast du das gemacht?
 
ja, hab das ganze automatisch erzeugen lassen,

die tabellen heißen:
- user (id, name, login, password)
- role (id, name)
- role_user(id, user_id, role_id)
 
ich verwende genau den gleichen code und das funktioniert wunderbar...

das einzige was ich mir noch denken könnte, wäre dass die klassen vom hibernate.jar (welche version auch immer) nicht ins eclipse eingebunden sind.
 
welches jars verwendest du denn? ich nehme die hibernate3.jar

einen teil mapped er ja auch
Code:
(cfg.Configuration                   444 ) Mapping resource: hibernate/RoleUser.hbm.xml
(cfg.HbmBinder                       260 ) Mapping class: hibernate.RoleUser -> role_user
(cfg.Configuration                   444 ) Mapping resource: hibernate/Role.hbm.xml
(cfg.HbmBinder                       260 ) Mapping class: hibernate.Role -> role
(cfg.Configuration                   444 ) Mapping resource: hibernate/User.hbm.xml
(cfg.HbmBinder                       260 ) Mapping class: hibernate.User -> user

und ein schreiben in die datenbank mit einer tabelle, die keine rel. beziehungen hat, klappt auch
 
vielleicht liegt es auch daran, wie ich meine mysql-db erstellt habe.
hat jemand vielleicht ein beipiel für m:n kardinalität in verbindung mit hibernate und mysql?
 
hab das problem gelöst. es lag daran, dass meine tabelle noch andere tabellen enthielt.
nachdem ich eine neue datenbank mit den 3 tabellen role, user, role_user erstellt und diese gemapped habe, lief es.
 
Hallo!

Habe genau die gleichen Probleme mit der SessionFactory und der MappinException. Gibt es prinzipiell Probleme in Verbindung mit Hibernate und Oracle? Der Tabelespace enthält genau 11 Tabellen und diese möchte ich mappen. Wenn ich die Lösung meines Vorredners richtig verstanden habe, waren dort in der Datenbank noch weitere Tabellen die nicht gemappt wurden. Daran kann es also bei mir nicht liegen.

Viele Grüße
 
Zurück