JPA Nativen Abfrage mit Tabellen aus unterschiedlichen schema in Oracle
Habe ich Tabelle MV_ULICE in der schema-ADRESY. Aber in JPA ich eine Verbindung zur Datenbank (Oracle) mit unterschiedlichen Nutzer dann ADRESY. Dieser Benutzer hat die Berechtigung für den Zugriff auf Tabellen aus dem schema ADRESY, so in der JPA-es war kein problem mit dem definieren von entities, da Sie leicht anderen schema in entity-definition:
@Entity
@Table(name = "MV_ULICE", schema = "ADRESY")
public class PoiStreet {
...
Das problem begann, als ich schaffen wollte Nativen Abfragen mit JPA. Abfrage sieht wie folgt aus:
final String queryString = "SELECT * "
+ "FROM MV_ULICE streets "
+ "WHERE CONNECT_BY_ISLEAF = 1 AND streets.status != 'H' "
+ "CONNECT BY NOCYCLE PRIOR streets.sym_ul = streets.symulold "
+ "START WITH streets.sym_ul = 'ulica'";
Query query = getEntityManager().createNativeQuery(
queryString, poi.domain.entities.streets.PoiStreet.class);
Und dies funktioniert nicht. Ich einfach Ausnahme bilden Oracle "Tabelle oder view nicht vorhanden".
Versuchte ich chanign MV_ULICE zu ADRESY.MV_ULICE
final String queryString = "SELECT * "
+ "FROM ADRESY.MV_ULICE streets " + ...
aber das hat nicht geholfen.
Also wer hat Erfahrung mit native queries in oracle mit verschiedenen schemas dann Benutzer, die Zugriff auf die Datenbank? Bitte helfen 🙂
- Können Sie abstrakte Kreuz-schema Logik entfernt in einer Ansicht, so dass Sie nur Zugriff auf eine Sicht von "Ihr" - schema?
- die Umsetzung verwenden Sie?
- rok: ich benutze Hibernate als JPA-provider. davek: die Tabellen, die ich Ihnen erzählt habe, sind schon mal eigentlich
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, ob dies die beste Lösung, aber ich denke, dass ein Datenbank-link funktionieren würde.
Stellen Sie zuerst eine Verbindung zu Ihrem "ersten" - Datenbank und führen Sie die folgenden an der SQL-Eingabeaufforderung:
wo
Diese Anweisung erstellt eine Datenbank-Verknüpfung mit dem Namen 'mylink'. Der link verbindet die SCOTT-Benutzer von der Datenbank installiert, die im host (
<hostname>
)Verwenden Sie dann den link-Namen auf das Objekt verwiesen auf die remote-Datenbank:
Ok, also die wahre Lösung des Problems ist eigentlich eine Lösung, die ich fälschlicherweise gesagt, dass funktioniert nicht.
Nahm ich meine ganz Zeit zu finden, mein Fehler, aber zu sagen, die lange Geschichte kurz mit Hilfe der standard-notation SCHEMA.TABLENAME arbeiten. Also in meinem Fall die Abfrage sollte wie folgt beginnen:
Berechtigungen erteilt werden, die auf die einzelnen schema-Objekte, nicht ein ganzes schema. Ich vermute, dass der Benutzer, den Sie anschließen, verfügt nicht über Berechtigungen für diese bestimmte Tabelle/view.