Problem beim Laden von Objekten, die von anderen Applikationen in eine DB eingefügt wurden

Michael6767

Mitglied
Hallo allerseits,

ich habe ein (Verständnis-)Problem bzgl. JPA/Hibernate.
Ich habe zwei Anwendungen. Die erste Anwendung erlaubt Kunden Bestellungen abzugeben und die zweite soll diese Information "live" anzeigen.
Die Datenbank sieht ungefähr so aus:
Master-Tabelle: Kunde
Detail-Tabelle: Bestellungen
Anwendung 1:
Der Kunde führt eine Bestellung aus. Diese Bestellung wird persistiert und kann auch in dieser Anwendung abgerufen werden.

Anwendung 2:
Wenn man den Kunden auswählt wird eine Abfrage ausgeführt, welche alle Bestellungen des Kunden zurückgeben soll. Leider bekomme ich aber nur die Bestellungen, die vor dem Start der Anwendung 2 bereits persistiert waren.

Frage: Wie bekomme ich die Anwendung 2 dazu, alle Bestellungen, die sich in der Datenbank befinden, zu laden?

Die Entität Orders (Bestellungen) besitzt ein Feld customer:
@ManyToOne
@JoinColumn(name="coustomerId")
private Customer customer;

An der grundsätzlichen Konfiguration kann es eigentlich nicht liegen, da ich ja ein Ergebnis erhalte. Leider halt unvollständig ...

Die Bestellungen werden folgendermaßen geladen:

Java:
public List<Order> listOrdersFromCustomer(String condition,
		String orderBy, Customer c) throws Exception {
	condition = "From Order as o Where o.customer = ?";
	Session session = SessionFactoryUtil.getInstance().getCurrentSession(); // Hibernate Session
	session.refresh( c ); // ich dachte, das hilft vielleicht. Leider nein.
	Query query = session.createQuery( condition).setEntity(0, c);
	return query.list();
}
Wie gesagt, das Ergebnis dieser Abfrage beinhaltet alle Bestellungen, die vor derm Start der Anwendung 2 bereits in der DB gespeichert waren.

Vielleicht kann mich jemand auf die richtige Spur setzen.

Gruß
Michael
 
G

gman

Gast
Hi,

guck dir nochmal deine Anwendung1 an. Klingt so als ob die Datensätze nicht richtig persistiert werden.
Fehlt da vielleicht noch irgendwo ein "session.flush" oder der Abschluss einer Transaction?

Wenn die Datensätze wirklich richtig persistiert wären müssten die in der Query auch auftauchen.
Alternativ wird deine Query nur einmal ausgeführt und dir werden alte Ergebnisse angezeigt.

PS: Führ die Query doch mal mit nem SQL-Tool aus (SqlDeveloper, Console...)
 

Michael6767

Mitglied
Hallo gman,

danke für die Tipps. Ich weiß, dass die Daten korrekt persistiert werden, da ich mit dem MySQL-Query-Browser die Daten sofort angezeigt bekomme. Sorry, das hätte ich auch posten sollen.
Und die Abfrage wird auch wunschgemäß ausgeführt. Ich habe ein Programm mit 2 Listen (Master/Detail). Wenn ich da auf den gewünschten Kunden klicke, dann wird die Query tatsächlich ausgeführt (im Debug-Mode getestet) und liefert leider nicht den "Live"-Zustand der Datenbanktabelle Orders.

Vielleicht muss ein bestimmter Verbindungsparameter bei MySQL gesetzt werden um dies zu erreichen?

Gruß
Michael
 

Michael6767

Mitglied
Problem gelöst:

Das Problem war, dass ich eine "alte" Session, die beim Start der Anwendung über eine SessionFactory erzeugt wurde, benutzt habe. Dies wird so häufig in Tutorials gezeigt. In diesem Fall ist das eben problematisch. Bei solchen Live-Aktualisierungen ist also darauf zu achten, dass eine neue Session benutzt wird.

Gruß
Michael
 

bluer

Aktives Mitglied
Ich habe das gleiche Problem konnte ea aber bisher leider nicht lösen. Mein spring-beans.xml sieht wie folgt aus
[XML]<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- <property name="showSql" value="true" />-->
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
</bean>
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<!-- Publishing session factory to be able view statistics -->
<bean id="sessionFactory" factory-bean="entityManagerFactory"
factory-method="getSessionFactory" />

<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/>[/XML]

Gibt es eine Property, bei der ich festlegen kann kann, das immer eine neue verwendet werden soll oder muss dies direkt in den DAO's geschehen?
 

Michael6767

Mitglied
Hallo bluer,

die Frage ist so etwas schwierig zu beantworten, da Du Deine DAO-Methoden nicht zeigst. Generell kann man aber sagen, dass Du die Abfrage ja über eine Session ausführen musst. Wenn Du diese Session mit Session.refresh() aktualisierst, dann solltest Du auch aktuelle Daten sehen. Das gilt im Übrigen auch bei mir. Es ist also nicht unbedingt notwendig, eine neue Session zu erzeugen.

Gruß
Michael
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Problem beim initialisieren des Caches Data Tier 0
S Problem beim Insert mit Hibernate Data Tier 9
N Problem beim session.flush(); Data Tier 17
S JPA Problem mit Cascading Data Tier 1
M Eclipse 4 RCP Hibernate Problem Data Tier 3
C JPA FetchType.LAZY, Relation @OneToMany und Problem mit dem update Data Tier 1
K Problem mit EJBs und Transaktionen Data Tier 0
G JPA: Entity Klasse @JoinColumns Problem Data Tier 2
M JPA Problem: java.sql.SQLSyntaxErrorException: Data Tier 7
H Hibernate Problem mit Lazy Loading bei @OneToMany Collections Data Tier 5
M MySql und JPA-Timestamp Problem Data Tier 8
J Hibernate Problem bei Master-Detail-Tabellen Data Tier 5
A JPA - ManyToMany Problem - keine Unique Mehrfachzuweisungen Data Tier 4
M Problem mit @Temporal Mapping und SQL Server Data Tier 3
P JPA - HashMap mit Many-to-Many Relation Problem Data Tier 4
B Problem mit @ManyToMany und CascadeType.ALL Data Tier 3
Blackskyliner [JPA][Anfänger] Problem mit Wertzuweisung aus Verbundtabelle Data Tier 2
B Problem mit org.hibernate.LazyInitializationException Data Tier 11
B DatenquellenUpdater extends Thread - Problem mit PermGenSpace Data Tier 5
Y [openJPA] Problem mit Transaktion? Data Tier 2
A @SecondaryTable Problem Data Tier 9
Y Postgres und JPA - Primärschlüssel Problem Data Tier 3
P SQL PRoblem Hibernate? Data Tier 8
Y EJB Problem mit Transaktionen Data Tier 7
M Transaction / Session Problem Data Tier 4
G JPA 2.0 Query Problem Data Tier 3
P CORBA Problem bei EJB 3.0 Anwendung in Glassfish v3 Data Tier 7
F Problem mit Hibernate Schema Update Data Tier 2
S Lazy loading Problem Data Tier 2
M Insert-Problem mit JPA/Hibernate Data Tier 4
megachucky JPA - Problem mit Persistence Unit / Context Data Tier 1
H Hibernate Problem Data Tier 4
D Performance Problem mit Prepared Statement Data Tier 6
T Problem mit openJPA Data Tier 7
P Problem mit Data Tier 9
GilbertGrape Cascade Problem (Hibernate) Data Tier 3
C JPA Problem mit attributeOverride und mehrspaltigem PK Data Tier 2
B select "neu" statement Problem (jpql) Data Tier 8
boxi Hibernate Lazy Loading Problem Data Tier 2
M Problem mit Hibernate und SLF4J - NoSuchMethodException Data Tier 3
G Connection Problem - WAS 6.1, Hibernate, OS Authentication Data Tier 1
K Hibernate update-Problem Data Tier 36
J hibernate problem Data Tier 14
N Hibernate - Problem mit Update/Insert Data Tier 4
B Problem mit @PersistenceContext Data Tier 4
G Problem with mapped of the tables at one to one relationship Data Tier 8
G Hibernate Collection Mapping - Fehler beim Updaten der DB Data Tier 0
R NPE beim Persistieren einer Entität Data Tier 6
R Beim deployen und initialisieren der DB werden Umlaute nicht gespeichert Data Tier 5
T JPA2/Hibernate: Many-to-Many-Relation wird u.a. beim löschen nicht aktualisiert Data Tier 14
A Probleme beim deployen Data Tier 4
T DB Daten beim Anlegen neuer EntityManagerFactory verloren Data Tier 3
ARadauer Hibernate Entität readonly laden... Data Tier 1
J JPA - Zeilen in einem festen Intervall laden. Data Tier 4
S JPA Laden von Objekten mit Fetch Data Tier 2
R JPA Criteria API: gefilterte Listen mit fetch laden Data Tier 5
R Hibernate daten laden Data Tier 7
R Ein Objekt mit einem String aus einem Set laden Data Tier 2
L Wie Bilder aus DB in SoftReference laden? Data Tier 3
D legacy db mit lustigen Spaltennamen per EntityManager find laden Data Tier 4
dunhillone Event aufrufen nach laden von Entitys Data Tier 3

Ähnliche Java Themen

Neue Themen


Oben