2016-07-21 13 views
0

Ich verwende die Hibernate-Implementierung von JPA (Hibernate-Version: 4.2.1, JPA-Version: 1.8.1). Ich habe einige native Abfragen, deren Ergebnis meiner Liste von benutzerdefinierten POJOS (markiert mit @Entity) zugeordnet ist. Wenn die Abfrage ausgeführt wird, erhalte ich jedoch eine leere Tabelle, die in meinem MySQL-Schema mit den Attributen in meinem POJO erstellt wurde. Wie stelle ich sicher, dass keine Tabelle zu meinem bestehenden Schema hinzugefügt wird, wenn man berücksichtigt, dass es nicht möglich ist, native Abfrageergebnisse einem POJO zuzuordnen, ohne sie als "Entity" zu kennzeichnen.Zuordnungsergebnis der systemeigenen Abfrage zu einem POJO, ohne dass eine entsprechende Tabelle in der Datenbank bei der Abfrageausführung erstellt wurde

POJO

package abc; 
@Entity 
public class Myclass 
{ 
@Id 
private Integer productId; 
private String productName; 
public MyClass(){ 
} 
/**getters and setters for productId and productName**/ 
} 

CODE Snippet für

List<Integer> productIdList = new ArrayList<>(); 
productIdList.add(1); 
productIdList.add(20); 
productIdList.add(34); 
List<MyClass> myList=(List<MyClass>)(entityManager.createNativeQuery("select p.productId, p.productName from products p where p.productId IN (:productIdList)",MyClass.class).setParameter("productIdList", productIdList).getResultList()); 
+1

Das klingt sehr seltsam für mich. Können Sie den entsprechenden Code hinzufügen? Normalerweise sollte eine native Abfrage den Typ "List " für jeden Datensatz in der Ergebnismenge zurückgeben. –

+0

Es gibt JPA 1.0, 2.0, 2.1. Es gibt keine JPA 1.8.1! –

+0

Überprüfen Sie Ihre Datei "presistenz.xml" für die Konfiguration mit dem Namen "hibernate.hbm2ddl.auto", und entfernen Sie sie. Diese Konfiguration wird zum Erstellen, Aktualisieren und Entfernen von Tabellen basierend auf im Code definierten Entitäten verwendet. Können Sie Ihren Code posten, damit wir verstehen, was genau Sie tun? – Navnath

Antwort

0

NATIVE QUERY EXECUTING hatte ich das gleiche Problem, für das ich alle möglichen Werte für hibernate.hbm2ddl.auto Parameter versucht, aber ohne Glück. Einfach würde ich eine Option wie do_nothing erwarten, aber in der Dokumentation gibt es keine solche. Meine Lösung war also, @Table("tbl_to_remove_<YourObjectName>") zu jeder Entität hinzuzufügen und alle neu erstellten Tabellen zu entfernen, die mit tbl_to_remove in db manuell beginnen und ja jedes Mal, wenn ich meine Anwendung neu starte.

aus der Community Dokumentation: here die möglichen Optionen sind

hibernate.hbm2ddl.auto aufgelistet automatisch validiert oder Exporte Schema DDL in die Datenbank, wenn die Session erstellt wird. Mit create-drop wird das Datenbankschema gelöscht, wenn die SessionFactory explizit geschlossen wird .

z.B. validieren | aktualisieren | erstellen | create-drop

+0

ja..das scheint th Jetzt nur noch ..aber ich denke, es sollte eine Möglichkeit geben zu verhindern JPA DDL auf DB jedes Mal, wenn die Anwendung im Einsatz ist – jarvis

+0

Ich würde wirklich glücklich sein, wenn Sie eine echte Antwort dafür finden und mit uns teilen. – ismail