To jest mój problem, muszę używać dużego SP, i nie ma czasu na przepisywanie w Javie. Używam kryteriów Hibernate i nie wiem, czy mogę to nazwać. Dziękuje za wszystko.Czy mogę wywołać procedurę przechowywaną z kryteriami hibernacji?
Odpowiedz
Patrz dokumentacja referencyjna: Using stored procedures for querying.
Odwzorowane kwerendy są wywoływane w ten sposób.
List employment = sess.getNamedQuery("BigSP")
.list();
Zmapowane zapytanie może zwracać encje.
<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 opisuje jak mapować wynik procedury przechowywanej, wykonane jako native zapytania.
Nie można tego zrobić za pomocą API Criteria, ale nie powinno to mieć znaczenia.
Nie, musisz użyć zapytania natywnego. Jeśli używasz adnotacji, zobacz 2.3.2. Mapping native queries.
Poniżej przykład:
@Entity
@NamedNativeQuery(
name="baz",
query="call fooProc(:bar, :i)",
callable=true,
readOnly=true,
resultClass=Foo.class
)
public class Foo {
private Date when;
//...
}
I to nazwać:
@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;
}
}
Dzięki Thivent, ale nie używamy denerwacji :( – Gaston
@Gaston Następnie odwołaj się do odpowiedzi Lachlana. –
Hibernate pozwala także na wykonywanie połączeń bazy danych bezpośrednio. Możesz też zrobić to w ten sposób. –
Dzięki fot odpowiedź, ale jak mogę to zrobić? – Gaston