Das ist mein Problem, ich muss einen großen SP verwenden, und es gibt keine Zeit in Java neu zu schreiben. Also verwende ich Hibernate-Kriterien und ich weiß nicht, ob ich es nennen kann. Dank an alle.Kann ich eine gespeicherte Prozedur mit Hibernate-Kriterien aufrufen?
Antwort
Siehe Using stored procedures for querying in der Referenzdokumentation.
Zugeordnete Abfragen werden wie folgt aufgerufen.
List employment = sess.getNamedQuery("BigSP")
.list();
Eine zugeordnete Abfrage kann Entitäten zurückgeben.
<sql-query name="BigSP" callable="true">
<return alias="emp" class="Employment">
<return-property name="employee" column="EMPLOYEE"/>
<return-property name="employer" column="EMPLOYER"/>
<return-property name="startDate" column="STARTDATE"/>
<return-property name="endDate" column="ENDDATE"/>
<return-property name="regionCode" column="REGIONCODE"/>
<return-property name="id" column="EID"/>
<return-property name="salary">
<return-column name="VALUE"/>
<return-column name="CURRENCY"/>
</return-property>
</return>
{ call BigSP }
</sql-query>
This document beschreibt, wie das Ergebnis einer gespeicherten Prozedur zur Karte, als native Abfrage ausgeführt.
Sie können dies nicht mit der Kriterien-API tun, aber das sollte keine Rolle spielen.
Nein, Sie müssen eine native Abfrage verwenden. Wenn Sie Anmerkungen verwenden, lesen Sie 2.3.2. Mapping native queries.
Im Folgenden ein Beispiel:
@Entity
@NamedNativeQuery(
name="baz",
query="call fooProc(:bar, :i)",
callable=true,
readOnly=true,
resultClass=Foo.class
)
public class Foo {
private Date when;
//...
}
Und es zu nennen:
@Stateless
public class FooBean implements FooLocal {
@PersistenceContext EntityManager em;
public Foo getAFoo(string bar, int i) {
Foo result = (Foo)em.createNamedQuery("baz").setParameter("bar", bar).setParameter("i", i).getSingleResult();
return result;
}
}
Danke Thivent, aber wir verwenden keine Annotationen :( – Gaston
@Gaston Dann siehe Lachlans Antwort. –
Hibernate können Sie auch Datenbank auszuführen Anrufe direkt. Du könntest es auch so machen. –
Danke für deine Antwort, aber wie kann ich das tun? – Gaston