Hibernate Problem mit one-To-Many

KevKoe

Grünschnabel
Hallo zusammen,

ich habe folgendes Problem mit Hibernate:

Ich habe 2 Tabellen ApplicationInfo und ScriptInfo. Diese stehen in einer One-To-Many Beziehung und werden über den Fremdschlüssel ProfileID identifiziert. Deswegen habe ich (über Annotations) folgendes in die Klasse ApplicationInfo.java eingefügt.

Code:
private Set<ScriptInfo> scriptInfo;
...
	@OneToMany
	@JoinColumn(name="ProfileID", referencedColumnName="ProfileID")
	public Set<ScriptInfo> getScriptInfo() {
		return scriptInfo;
	}

Soweit so gut...

Will ich dies dann Testen über
Code:
session.beginTransaction();
			result = session.createSQLQuery("Select * from ApplicationInfo a where a.profileID=1").addEntity(ApplicationInfo.class).list();
			session.getTransaction().commit();
			System.out.println("Groesse: "+result.size()); //Liefer 1 -> ist richtig
			ApplicationInfo a = (ApplicationInfo)result.get(0);
			System.out.println("Leer? :"+a.getScriptInfo().isEmpty());

Wirf er folgenden Fehler: (und zwar genau in der Ausgabe "Leer?"
org.hibernate.exception.SQLGrammarException: could not initialize a collection: [Connector.ApplicationInfo.scriptInfo#1]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2173)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:62)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:627)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1863)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:369)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:134)
at org.hibernate.collection.PersistentSet.isEmpty(PersistentSet.java:169)
at Connector.TestHibernate.main(TestHibernate.java:45)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'scriptinfo0_.ScriptInfo' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1953)
at org.hibernate.loader.Loader.doQuery(Loader.java:802)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2166)
... 9 more

Ich hab echt keine Ahnung woran das liegt.
Das Durchstöbern diverser Foren hat mich leider auch nicht weiter gebracht. Es wird überall so beschrieben, wie ich es programmiert habe...

Vielen Dank für die Hilfe
 
Moin,

das liegt daran, dass du die Transaktion/Session bereits beendet hast, und die Set "ScriptInfo" nicht initialisiert war. Du vor dem Commit die Set initialisieren: session.initialize(a.getScriptInfo()).
 
Zurück