Spring Probleme mit Datenzugriff

Psypsy

Mitglied
Moin,

ich brauche hilfe, ich hoffe ich bin in der richtigen Abteilung.
Ich weiß halt nur nicht an welcher Stelle das Problem genau liegt
(WildFly, Spring, JPA, Hibernate)
Ansonsten bitte einfach verschieben.
Also ich muss eine Application von PHP zu Java Konvertieren.
Datenbank darf ich nicht ändern, ist eine Oracle.

Also ich habe eine Spring Boot (aktuellste Version) Anwendung erstellt.
Dazu nutze ich Spring Data JPA und Hibernate, alles aktuelle Versionen.

Wenn ich die Anwendung als Boot Version starte läuft alles super.
Jetzt muss die Anwendung aber leider in einem WildFly 9.0.1 deployed werden.

So das habe ich auch hinbekommen.
Wenn die Anwendung startet wird per JDBCTemplate auf ein paar Prozeduren zugegriffen, das funktioniert auch super.
Aber dann kommen die Zugriff per Spring Data JPA und es funktioniert nichts mehr, es werden keine Daten gefunden,.
Wenn ich jetzt aber einen Datensatz speicher, was funktioniert, können danach auch die gelesen werden.
Ich versteh es nur nicht.
Wieso besteht eine Verbindung, ich kann die Entitäten speichern aber nicht lesen und wenn ich gespeichert habe dann doch lesen.
Keine Exceptions außer das er die Entitäten nicht findet wenn es eine Referenz gibt, ansonsten nichts.
Wenn ich die gleichen Daten allerdings per JDBCTemplate lese dann funktioniert es auch.

Hat irgendjemand eine Idee, ich bin über jeden Tipp dankbar.
Ach ich nutze ausschließlich JavaConfig.

By
PsyPsy
 
Hallo Psypsy

In meinen Worten zusammengefasst:
  • Du kannst mit JDBC bestehende Daten lesen
  • Du kannst mit Hibernate bestehende Daten nicht lesen
  • Du kannst mit Hibernate neue Daten schreiben und auch wieder lesen
Soweit korrekt?

Falls ja:
Bist du absolut sicher, dass Hibernate und das JDBCTemplate exakt dieselbe Datenbank-Konfiguration verwenden? Wenn du also per Hibernate einen Datensatz liest, kannst du den per JDBCTemplate auch wieder einlesen / findest ihn in der bestehenden Datenbank wieder?

Für mich tönt es so, wie wenn du auf unterschiedliche Datenbanken zugreifen würdest.


Freundliche Grüsse
CptSocket
 
Hi,

deine Zusammenfassung passt fast.
Ich kann mit Hibernate Daten schreiben und erst dann auf alle Daten ( auch die schon bestehenden) zugreifen.

Ich hatte auch die gleiche Vermutung, das die nicht die gleiche Datenbank oder das gleiche Schema nutzen.
Aber nach einer Speicheroperation kann er ja alle Daten Lesen.
Also kann das nicht angehen.

By
PsyPsy
 
Ok .... 🙂

Hast du schon experimentiert, was genau notwendig ist, dass du auf die Daten zugreifen kannst? Das würde vielleicht helfen, das Problem weiter einzugrenzen. (Ist der schreibende Zugriff notwendig oder reicht zweimal nacheinander lesen? Was passiert, wenn du längere Zeit nicht mehr auf die DB zugreifst und dann erneut eine Lesende Operation ausführst?)

Poste doch mal die relevante Konfiguration von Hibernate, vielleicht ist da etwas erkennbar.


Freundliche Grüsse
CptSocket
 
Moin,

das versuche ich grad noch heraus zu finden was ich genau brauch das ich die Daten lesen kann.

Ich habe das Lesen der Daten mit 2 bis 4 direkt nacheinander ausgeführten befehlen versucht.
Jedesmal kam der gleiche Fehler, konnte User für Id .... nicht im Repo finden.
Der User ist aber vorhanden da ich in ein Paar Zeilen Vorher per JdbcTemplate geladen habe.
Der Zeitraum zwischen den Leseoperationen scheint auch keinen Einfluss zu haben.
Ich habe Zeiträume zwischen ein paar Sekunden, Minuten und Stunden.

Die einzige Konfiguration die ich für die Datenbankzugriffe habe sind die beiden foögenden.
Der Rest ist Spring Boot Default.
Java:
@Configuration
public class RestConfiguration extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.exposeIdsFor(Report.class, Library.class, UserTable.class);
    }

}
und die application.yaml
Code:
server:
  port: 9334
spring:
  profiles:
    active: wildFlyJNDI
  thymeleaf:
    cache: false
    mode: LEGACYHTML5
  jackson:
    deserialization:
      accept_empty_string_as_null_object: true
      accept_single_value_as_array: true
  data:
    rest:
      basePath: api
      returnBodyOnCreate: true
      returnBodyOnUpdate: true
---
spring:
  profiles: wildFlyJNDI
  datasource:
    platform: oracle
    jndi-name: java:/oracleDb
  jpa:
    database-platform: org.hibernate.dialect.Oracle10gDialect
    show-sql: true

By
PsyPsy
 
Moin,

hat jetzt zwar lange gedauert aber das Problem wurde gefunden.
Es liegt an der Datenbank.
  1. Ist diese wohl auf einem schwachen Rechner installiert.
  2. Laufen da einige Trigger, Funktionen und Prozeduren ab, die mir vorher nicht bekannt waren.
    1. Zudem auch einiges an Ausführungszeit in Anspruch nehmen.
  3. Es gibt einen eigene Sessionverwaltung in der Datenbank die sich immer nur ein einer Connection befindet und wenn man einen Connection-Pool verwendet funktioniert das nicht mehr.
Mit freundlichen Grüßen

PsyPsy
 

Zurück
Oben