Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe eine Frage und zwar möchte ich aus meiner Oracle 10g XE alle Datenbanktabellen eines bestimmten Benutzters auslesen ;-) Ist das mit JPA irgendwie möglich?
es sollte möglich sein, mit JPA auf die Spalten OWNER und TABLE_NAME der View SYS.ALL_TABLES zu mappen und damit eine Abfrage auf einen bestimmten Owner zu formulieren.
ich hab mal vorausgesetzt, dass Du die Grundlagen von JPA kennst und dass als Persistence Provider für JPA Hibernate zum Einsatz kommt.
Zunächst braucht man eine Entity-Klasse, welche die View ALL_TABLES repräsentiert. Dabei müssen nicht alle Tabellenspalten dieser View gemappt werden, nur die für diesen zweck interessanten OWNER und TABLE_NAME:
Natürlich lässt sich das noch anders ermitteln, aber dann nicht mit JPA. Man kann z.B. selber eine JDBC-Connection zur Datenbank aufbauen und dann eine Abfrage "select table_name, owner from sys.all_tables" absetzen, das ResultSet auswerten usw. Aber "einfacher" wird die Sache dadurch auch nicht wirklich.
Die Abfrage arbeitet case sensitive, man muss dabei die Groß-/Kleinschreibung beachten. Mit z.B.
"SELECT table_name, owner FROM sys.all_tables WHERE lower(owner) = lower('"+databaseUser+"')"
oder
"SELECT table_name, owner FROM sys.all_tables WHERE lower(owner) LIKE lower('%"+databaseUser+"%')"
kann das "normalisiert" werden.
org.hibernate.AnnotationException: No identifier specified for entity: ....
Es spielt für diesen Fall keine Rolle, welche Spalte mit @Id annotiert wird, da nur lesend auf die View zugegriffen wird. der Trick dient nur dazu, JPA/Hibernate zufrieden zu stellen.