2017-04-19 2 views
0

Ich habe eine Aufgabe bei der Arbeit, wo ich Hibernate und einige Klassen verwenden muss, die Ansichten zugeordnet sind. Die Aufgabe sagt, dass ich eine Auswahl in einer Ansicht erstellen sollte, die kein vollständiges Objekt der Klasse zurückgibt, sondern ein Objekt mit nur einigen Attributen der initialisierten Klasse. Ich dachte zuerst darüber nach, einen Konstruktor zu erstellen, der diese Felder nur als Parameter bekommt, aber ich kann keine Lösung im Web finden, die beide Möglichkeiten offen hält (Teile der Klasse und ganze Klasse). Jeder Vorschlag ist willkommen. Wenn Sie einen Code oder eine weitere Erklärung benötigen, fragen Sie danach.Erzwinge den Ruhezustand, um das vollständige Objekt NICHT abzurufen

Antwort

1

Sie können eine jpql-Abfrage erstellen oder die Kriterien api verwenden, um die gewünschten Attribute auszuwählen.

JPQL Tutorial ist http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html

Criteria ist http://docs.oracle.com/javaee/6/tutorial/doc/gjivm.html

+0

Ich verwende tatsächlich Kriterien, aber ich kann den Teil nicht finden, wo ich nur bestimmte Attribute auswähle. kannst du mir ein beispiel zeigen? oder ist es der Teil mit 'root.get (attributes)' innerhalb der Auswahl? – XtremeBaumer

+0

und haben Sie eine Idee, wie ich maximal 1000 Datensätze abrufen kann, aber prüfen, ob das Ergebnis größer als 1000 wäre? Zur Zeit benutze ich 'setMaxResults()' – XtremeBaumer

+0

root.get (Attribute) ist der einzige Weg, den ich bis jetzt kennen –

0

Sie unter Code verwenden können. erstellen CustomerProfile.class mit Getter und Setter

können Sie native SQL-Abfrage in Create() und holen Sie den Parameter, die Sie nur dann benötigen, können Sie Ihr Ergebnis in entsprechenden Klasse

Query query = ((SQLQuery) getSession().createSQLQuery(
       "select First_name,Last_name,email_id,.. from view_name where customer_id=:customer_id"). 
       setResultTransformer(Transformers.aliasToBean(CustomerProfile.class))).    
       setParameter("customer_id", cutsomer_id) 
       ;  
     List<CustomerProfile> list = query.list(); 

verwandeln Sie benötigen.

+0

Ich denke, dies negiert die Arbeit mit Ruhezustand ein wenig wegen der nativen sql – XtremeBaumer

+0

Ihre Frage besagt, dass Sie Daten aus view.AFAIK abrufen möchten Sie können den Primärschlüssel nicht in Blickfeldern erstellen. Und Hibernate erfordert, dass das Modell einen Primärschlüssel haben sollte. Ich denke, die einzige Möglichkeit, Daten aus der Ansicht abzurufen, ist die Verwendung von native sql im Ruhezustand. – Vaibs

+0

Hier liegen Sie falsch. Wenn eine Ansicht vorhanden ist, können Sie stattdessen einfach die Annotation "Tabelle" für die Ansicht angeben. das funktioniert ganz gut. ich mache es schon mit einem ganzen abject und jetzt auch mit nur noch Teilen des Objekts – XtremeBaumer

Verwandte Themen