-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Fehler: MySQLSyntaxErrorException: Unknown column
PostPosted: Mon Oct 13, 2008 6:46 pm 
Newbie

Joined: Mon Oct 13, 2008 5:50 pm
Posts: 3
Hibernate version: 3.1

Hallo liebe Gemeinde,

ich suche schon den ganzen Abend und finde nicht so recht eine Lösung für mein Problem. Es geht im Grunde um ein M:N-Mapping. Ich habe mich strikt an die Dokumentation gehalten, d.h.

Klasse CPerson:

Code:
class CPerson extends Observable implements Serializable
{
   ...
    private Set SpielteIn;

   ...

   /* getters and setters */
}


Mapping File CPerson.hbm.xml:

Code:
<hibernate-mapping>

    <class name="svenali.mediaDB.CPerson" table="PERSON">
        <id name="ID" column="P_ID" >
            <generator class="native" />
        </id>

        <set name="SpielteIn" table="REL_SCHAUSPIELER_FILM" fetch="select" inverse="true">
            <key column="S_ID" />
            <many-to-many column="F_ID" class="svenali.mediaDB.CFilm" />
        </set>

       ...
</hibernate-mapping>


Die REL_SCHAUSPIELER_FILM Tabelle:
Code:
--- Relation REL_SCH_FILM
CREATE TABLE REL_SCHAUSPIELER_FILM (
  S_ID int unsigned NOT NULL references PERSON,
  F_ID int unsigned NOT NULL references FILM,
  PRIMARY KEY(S_ID,F_ID)
) TYPE=MYISAM;


Die Klasse Film ist analog der Klasse CPerson aufgebaut (natürlich mit anderen Attributen). In derem Mapping-File ist die M:N-Beziehung so deklariert:
Code:
<set name="Schauspieler" table="REL_SCHAUSPIELER_FILM">
            <key column="F_ID"/>
            <many-to-many column="S_ID" class="svenali.mediaDB.CPerson" />
        </set>


Im laufenden Betrieb der Applikation lade ich jetzt eine CPerson-Instanz. Folgende Fehlermeldung erscheint:
Quote:
[java] org.hibernate.exception.SQLGrammarException: could not initialize a collection: [svenali.mediaDB.CPerson.SpielteIn#3]
[java] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
[java] at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
[java] at org.hibernate.loader.Loader.loadCollection(Loader.java:2001)
[java] at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
[java] at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
[java] at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:63)
[java] at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
[java] at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
[java] at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
[java] at org.hibernate.collection.AbstractPersistentCollection.readElementExistence(AbstractPersistentCollection.java:142)
[java] at org.hibernate.collection.PersistentSet.add(PersistentSet.java:187)
[java] at svenali.mediaDB.CFilm.addSchauspieler(Unknown Source)
[java] at svenali.ofdb.COFDB.prepareBean(Unknown Source)
[java] at svenali.ofdb.COFDB.getMovie(Unknown Source)
[java] at svenali.gui.CSelectOFDBMovie.ok(Unknown Source)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at com.trolltech.qt.internal.QSignalEmitterInternal$AbstractSignalInternal.emit_helper(QSignalEmitterInternal.java:346)
[java] at com.trolltech.qt.QSignalEmitter$Signal1.emit(QSignalEmitter.java:195)
[java] at com.trolltech.qt.gui.QDialog.__qt_exec(Native Method)
[java] at com.trolltech.qt.gui.QDialog.exec(QDialog.java:92)
[java] at svenali.gui.CAddMovie.searchInOFDB(Unknown Source)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at com.trolltech.qt.internal.QSignalEmitterInternal$AbstractSignalInternal.emit_helper(QSignalEmitterInternal.java:346)
[java] Hibernate: select spieltein0_.S_ID as S1_1_, spieltein0_.F_ID as F2_1_, cfilm1_.F_ID as F1_31_0_, cfilm1_.TITEL as TITEL31_0_, cfilm1_.ORIGINALTITEL as ORIGINAL3_31_0_, cfilm1_.ERSCHEINUNGSJAHR as ERSCHEIN4_31_0_, cfilm1_.FSK as FSK31_0_, cfilm1_.SPRACHE as SPRACHE31_0_, cfilm1_.WEITERE_INFOS as WEITERE7_31_0_, cfilm1_.FILMGESELLSCHAFT as FILMGESE8_31_0_, cfilm1_.EIGENTUEMER as EIGENTUE9_31_0_, cfilm1_.GRUPPE as GRUPPE31_0_, cfilm1_.RECHTE as RECHTE31_0_, cfilm1_1_.FILMINHALT as FILMINHALT34_0_, cfilm1_1_.FILMLAENGE as FILMLAENGE34_0_, cfilm1_1_.KURZINHALT as KURZINHALT34_0_, cfilm1_2_.SERIENINHALT as SERIENIN2_35_0_, cfilm1_3_.FOLGENINHALT as FOLGENIN2_36_0_, cfilm1_3_.STAFFEL as STAFFEL36_0_, cfilm1_3_.FOLGENLAENGE as FOLGENLA4_36_0_, cfilm1_3_.SERIE as SERIE36_0_, cfilm1_3_.EIGENTUEMER as EIGENTUE6_36_0_, cfilm1_3_.GRUPPE as GRUPPE36_0_, cfilm1_3_.RECHTE as RECHTE36_0_, case when cfilm1_1_.F_ID is not null then 1 when cfilm1_2_.S_ID is not null then 2 when cfilm1_3_.FOL_ID is not null then 3 when cfilm1_.F_ID is not null then 0 end as clazz_0_ from REL_SCHAUSPIELER_FILM spieltein0_ left outer join FILM cfilm1_ on spieltein0_.F_ID=cfilm1_.F_ID left outer join SPIELFILM cfilm1_1_ on cfilm1_.F_ID=cfilm1_1_.F_ID left outer join SERIE cfilm1_2_ on cfilm1_.F_ID=cfilm1_2_.S_ID left outer join FOLGEN cfilm1_3_ on cfilm1_.F_ID=cfilm1_3_.FOL_ID where spieltein0_.S_ID=?
[java] at com.trolltech.qt.QSignalEmitter$Signal1.emit(QSignalEmitter.java:195)
[java] at com.trolltech.qt.gui.QApplication.exec(Native Method)
[java] at svenali.gui.CEgmont.main(Unknown Source)
[java] Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'cfilm1_2_.S_ID' in 'field list'
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
[java] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
[java] at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
[java] at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
[java] at com.mysql.jdbc.Util.getInstance(Util.java:381)
[java] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
[java] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
[java] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
[java] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
[java] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
[java] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
[java] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
[java] at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
[java] at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885)
[java] at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
[java] at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
[java] at org.hibernate.loader.Loader.doQuery(Loader.java:674)
[java] at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
[java] at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
[java] ... 29 more


Diese Spalte ist in der Tat nicht in der Tabelle vorhanden, nur ist mir schleierhaft warum er dieses SQL-Statement so baut. Ich weis nicht weiter. Wie kann ich dieser Fehlermeldung auf die Schliche kommen?

Liebe Grüße,
Sven


Top
 Profile  
 
 Post subject: Problem Gelöst!
PostPosted: Tue Oct 14, 2008 6:43 am 
Newbie

Joined: Mon Oct 13, 2008 5:50 pm
Posts: 3
Sorry!

Manchmal sollte man über seine Probleme wirklich einfach überschlafen.

Die Lösung ist einfach. Es liegt gar nicht an meiner "ordentlichen" M:N-Beziehung. Es liegt an der Vererbungsbeziehung, die ich hier gar nicht beschrieben habe. Es gibt eine Film-Entität. Darüberhinaus gibt es noch Serie und Folge als abgeleitete Entitäten und entsprechend auch als POJOs. Das Problem ist nur das die PK's unterschiedlich heissen. Der PK der Film-Entität heisst F_ID, die der Serie S_ID und genau das bringt Hibernate (verständlicherweise) aus dem Tritt.

Vielen Dank für die zahlreichen Views.

Liebe Grüße aus dem Norden,
Sven


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.