Hibernate Liste mit allen Objekten einer Entity

computersport

Aktives Mitglied
Hallo Community,

Ich versuche im moment eine Liste mit allen Objekten zu bekommen die unter einer Bestimmten
Entity abgespeichert werden.

Aber ich glaub ich stell mich einfach zu blöd an. Vielleicht weiß einer wie es geht.
Hier mal ne Auflistung wie ich es bisher versucht habe
Java:
List<FabrikListe> fabrikliste = (List<FabrikListe>) session
					.createCriteria(FabrikListe.class).list();
Java:
List<FabrikListe> fabrikliste = (List<FabrikListe>) session.createQuery("from FabrikListe as fabrikliste")
			.list();
Java:
List<FabrikListe> fabrikliste = (List<FabrikListe>) session.createQuery("from FabrikListe")
			.list();

greetz
Compi
 
die dritte klingt gut, absolut äquivalent ist
Java:
List<FabrikListe> fabrikliste = session.createQuery("from FabrikListe").list()
man kann nicht generisch casten

----

was funktioniert daran denn nicht?
 
An sich sollte es ja funktionieren dummerweise krieg ich keine Liste zurückgegeben obwohl in der DB mindestens ein Eintrag vorhanden ist. Ich werd es zuhause nochmal ausprobieren und gucken ob der Fehler evtl. auf der Client seite von GWT liegt und mich dann zurück melden.
 
wie kam/ kommt das Objekt denn in die Liste, zufällig parallel neu eingefügt mit einem DB Tool und noch kein commit?
 
Also das speichern des Objekts in der Datenbank funktioniert einwandfrei. Hab dort drei einträge aber wenn ich mir die Liste aus der DB hole mit hibernate krieg ich immer ne NullPointerException

Entweder dort wird irgendwas nicht richtig übergeben oder der holt sich nichts aus der DB.
 
es gibt noch
session.createSQLQuery()
wenn da auch nichts kommt, dann liegt es zumindest eher nicht an den Hibernate-Mappings usw.
 
Klingt jetzt zwar etwas blöd aber wie würde der SQL befehl heißen?

Ich hab mich direkt mit SQL nicht auseinandergesetzt sondern nur mit den Befehlen von Hibernate.
 
select * from richtigerTabellenname

ich frage mich wie du dann auf anderen Wege festgestellt hast, ob etwas in der Tabelle drin ist
 
Ich glaub ich hab das Problem gefunden:

Dies ist der Code auf der Client seite wo ich mir die Liste hole:

[Java]
private List<DTOFabrik> getFarbiken() {
final Container<List<DTOFabrik>> container = new Container<List<DTOFabrik>>();
FabrikServiceAsync service = (FabrikServiceAsync) GWT.create(FabrikService.class);
ServiceDefTarget servicedef = (ServiceDefTarget) service;
servicedef.setServiceEntryPoint(GWT.getModuleBaseURL() + "fabrik");

AsyncCallback<List<DTOFabrik>> callback = new AsyncCallback<List<DTOFabrik>>() {

@Override
public void onSuccess(List<DTOFabrik> result) {
container.setData(result);

}

@Override
public void onFailure(Throwable caught) {

}
};

service.getFabrikListe(callback);
List<DTOFabrik> result = container.getData();
GWT.log(result.get(1).getName());
return result;

}
[/code]

Und das ist die Fehler mleudng die ich für "GWT.log(result.get(1).getName());" erhalte
Java:
java.lang.NullPointerException: null
    at ourProject.client.UI.admin.fabrik.AdminNeueFabrikUI.getFarbiken(AdminNeueFabrikUI.java:252)
    at ourProject.client.UI.admin.fabrik.AdminNeueFabrikUI.access$0(AdminNeueFabrikUI.java:230)
    at ourProject.client.UI.admin.fabrik.AdminNeueFabrikUI$1.onSelection(AdminNeueFabrikUI.java:77)
    at com.google.gwt.event.logical.shared.SelectionEvent.dispatch(SelectionEvent.java:89)
    at com.google.gwt.event.logical.shared.SelectionEvent.dispatch(SelectionEvent.java:1)
    at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.fireEvent(HandlerManager.java:65)
    at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.access$1(HandlerManager.java:53)
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:178)
    at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:52)
    at com.google.gwt.event.logical.shared.SelectionEvent.fire(SelectionEvent.java:43)
    at com.google.gwt.user.client.ui.TabPanel.onTabSelected(TabPanel.java:383)
    at com.google.gwt.user.client.ui.ListenerWrapper$WrappedTabListener.onSelection(ListenerWrapper.java:754)
    at com.google.gwt.event.logical.shared.SelectionEvent.dispatch(SelectionEvent.java:89)
    at com.google.gwt.event.logical.shared.SelectionEvent.dispatch(SelectionEvent.java:1)
    at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.fireEvent(HandlerManager.java:65)
    at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.access$1(HandlerManager.java:53)
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:178)
    at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:52)
    at com.google.gwt.event.logical.shared.SelectionEvent.fire(SelectionEvent.java:43)
    at com.google.gwt.user.client.ui.TabBar.selectTab(TabBar.java:462)
    at com.google.gwt.user.client.ui.TabBar.selectTabByTabWidget(TabBar.java:601)
    at com.google.gwt.user.client.ui.TabBar.access$0(TabBar.java:596)
    at com.google.gwt.user.client.ui.TabBar$ClickDelegatePanel.onBrowserEvent(TabBar.java:151)
    at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1307)
    at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1263)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
    at com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1714)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188)
    at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
    at com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:1669)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:401)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)
    at java.lang.Thread.run(Unknown Source)

Und dies ist die Klasse Container:

Java:
package ourProject.client.ArbeitsKlassen;

public class Container<T> {
	public T data;
	
	public T getData() {
		return data;
	}
	public void setData(T data) {
		this.data = data;
	}

}

Kann es sein das die Liste irgendwie verloren geht wenn ich diese im Container Speichere?
 
nicht kompliziert denken, stattdessen einfach denken,
viel logischer ist doch, dass
> container.setData(result);
gar nicht erst ausgeführt wird, und das gehört geloggt

wie viel einfacher wäre alles, wenn du nur die simpelsten Befehle hinschreiben würdest, die es gibt:

> System.out.println("speichere result in container: "+result);
> container.setData(result);


> List<DTOFabrik> result = container.getData();
> System.out.println("verwende gleich result aus container: "+result);
> GWT.log(result.get(1).getName());
 
Also das Loggen werd ich mir zu herzen nehmen erspart einem eine Menge arbeit.

Also innerhalb der Methode onSuccess wird result geloggt.

Jedoch wird nicht "verwende gleich result aus container: " nicht angezeigt....
Die Exception zeigt auf den punkt wo ich mir die Daten mit Container.getData() hole.
 
eine andere Exception als vorher bzw. andere Position?
oder wird nur die Anzeige minimal verschoben weil du weiter oben eine neue Zeile eingefügt hast?
füge noch mehr Leerzeilen ein, verschiebe den Code gar testweise eine neue Untermethode ganz woanders hin,
genau testen wer wem einen Streich spielt

container auf null zu loggen ist fast überflüssig, da es eine finale Variable ist, dennoch besser tun
 
Ich hab das befüllen der Listbox jetzt direkt in der onSuccess methode gemacht und jetzt klappt es, bloß warum klammt es sonst nicht.....

Java:
	private void getFarbiken() {
		FabrikServiceAsync service = (FabrikServiceAsync) GWT.create(FabrikService.class);
		ServiceDefTarget servicedef = (ServiceDefTarget) service;
		servicedef.setServiceEntryPoint(GWT.getModuleBaseURL() + "fabrik");
		
		AsyncCallback<List<DTOFabrik>> callback = new AsyncCallback<List<DTOFabrik>>() {
			
			@Override
			public void onSuccess(List<DTOFabrik> result) {
				List<DTOFabrik> dtofabrikliste = result;
				Object[] elements = dtofabrikliste.toArray();
				for(int i = 0; i < dtofabrikliste.size(); i++) {
					DTOFabrik dto = (DTOFabrik) elements[i];
					listboxAuswahl.addItem(dto.getName());
				}
			}
			
			@Override
			public void onFailure(Throwable caught) {
				
			}
		};
		System.out.println("vor dem Service");
		service.getFabrikListe(callback);
	}
 
was ich mit dem Logging eigentlich erreichen wollte ist wohl auch eingetreten, nur ist es nicht so leicht zu interpretieren
und ich selber habe auch nicht mehr genau genug daran gedacht,

das Problem ist wahrscheinlich, dass der Code mit
> GWT.log(result.get(1).getName());
VOR dem Aufruf der Methode im AsyncCallback stattfindet,
deswegen heißt es sicher AsyncCallback, weil es kein direkter Callback ist sondern ein wenig dauert,

du müsstest also erst die Ausgabe
> "verwende gleich result aus container: "+result
erhalten, dann den vielen Text durch die Exception, dann später
> "speichere result in container: "+result

dass du das so nicht in der Anzeige vorliegen hast, kann daran liegen, dass Fehler in System.err geschrieben werden und Ausgaben in System.out,
diese beiden Streams werden mehr oder wieder durcheinanders ausgegeben,
deswegen 'speichere'-Ausgabe vor der Exception und 'verwende' nicht zu erkennen weil das wer weiß wo steht,
vor nach, zwischen der langem Exception-Ausgabe, Text-Suche hilft vielleicht

Möglichkeiten das deutlicher zu machen:
- System.err.println() statt System.out.println() verwenden,
- mit Thread.sleep(); längere Pausen zwischen den Befehlen/ Ausgaben durchführen
- aktuelle Zeit mitloggen
- einen professionellen Logger verwenden

-------

zum Problem hast du wahrscheinlich schon die optimale Lösung gewählt, die Verarbeitung sollte in den AsyncCallback,
oder Thread.sleep() kann helfen, warten bis AsyncCallback fertig ist
 
was ich mit dem Logging eigentlich erreichen wollte ist wohl auch eingetreten, nur ist es nicht so leicht zu interpretieren
und ich selber habe auch nicht mehr genau genug daran gedacht,

das Problem ist wahrscheinlich, dass der Code mit
> GWT.log(result.get(1).getName());
VOR dem Aufruf der Methode im AsyncCallback stattfindet,
deswegen heißt es sicher AsyncCallback, weil es kein direkter Callback ist sondern ein wenig dauert,

du müsstest also erst die Ausgabe
> "verwende gleich result aus container: "+result
erhalten, dann den vielen Text durch die Exception, dann später
> "speichere result in container: "+result

dass du das so nicht in der Anzeige vorliegen hast, kann daran liegen, dass Fehler in System.err geschrieben werden und Ausgaben in System.out,
diese beiden Streams werden mehr oder wieder durcheinanders ausgegeben,
deswegen 'speichere'-Ausgabe vor der Exception und 'verwende' nicht zu erkennen weil das wer weiß wo steht,
vor nach, zwischen der langem Exception-Ausgabe, Text-Suche hilft vielleicht

Möglichkeiten das deutlicher zu machen:
- System.err.println() statt System.out.println() verwenden,
- mit Thread.sleep(); längere Pausen zwischen den Befehlen/ Ausgaben durchführen
- aktuelle Zeit mitloggen
- einen professionellen Logger verwenden

-------

zum Problem hast du wahrscheinlich schon die optimale Lösung gewählt, die Verarbeitung sollte in den AsyncCallback,
oder Thread.sleep() kann helfen, warten bis AsyncCallback fertig ist


Betreffend "Thread.sleep()" hab ich mich ein bisschen schlau gemacht und glaube das dies in GWT an sich nicht möglich ist. Hier ein Link wo darauf eingegangen wird. Ist aber auf Englisch.
Für alle die evtl. das gleiche Problem haben.

My RPC won't work AKA That's not Async - Google Web Toolkit | Google Groups

Ich hoffe ich konnte helfen.
 

Zurück
Oben