[Java lista] eclipselink+postgresql+stored procedure

zamek zamek at vili.pmmf.hu
2009. Júl. 29., Sze, 17:14:45 CEST


hello,

Szeretnek hasznalni egy tarolt eljarast, a bonyolult jpa subquery-k 
helyett.
Van egy egyszeru eljaras: userpermissions(userId integer), ami egy 
Permissions tabla egy sorat adja vissza. Termeszetesen erre van egy jpa 
persistent object is.
A pg deklaracio igy nez ki:

create or replace function userpermissions (userId integer) returns 
setof permissions
as '
declare
     result permissions%rowType;
begin
     for result in
         select * from permissions
             where permissions.p_id in (
                 select gp_permission from group_permission
                     where gp_group in (select g_id from user_groups
                         where u_id = userid))
     loop
         return next result;
     end loop;
     return;
end;
' language 'plpgsql';

Hogy tudom meghivni ezt eclipselink alol?
amit eddig probaltam:

1. Query qry = em.createNativeQuery("select * from userpermissions(?)");
         qry.setParameter(1, usr.getId());
         return qry.getResultList();

Ez jo lenne, csak nem Permission objektumok listajat adja vissza, hanem 
tombok tombjet:(

2. @NamedStoredProcedureQueries (
     @NamedStoredProcedureQuery(name="userpermissions", 
procedureName="userpermissions",
 
parameters=@StoredProcedureParameter(name="userId",queryParameter="userId",type=Integer.class,direction=Direction.IN),
             resultClass=Permissions.class, returnsResultSet=true)
)
...
        Query qry =em.createNamedQuery("userpermissions");
         qry.setParameter("userId", usr.getId());
         return qry.getResultList();
erre kivetelt kapok: prepared statement "userpermissions" does not exist :(

3. PLSQLStoredProcedureCall plsql = new PLSQLStoredProcedureCall();
         plsql.setProcedureName("userpermissions");
         plsql.addNamedArgument("userId", "userId", Integer.TYPE);
         ReadAllQuery q = new ReadAllQuery();
         q.setCall(plsql);
         q.addArgument("userId");
         List args = new ArrayList();
         args.add(usr.getId());
         q.addArgumentValues(args);
         Query query = JpaHelper.createQuery(q, em);
         return query.getResultList();
ujabb kivetel:
"Query argument userId not found in the list of parameters provided 
during query execution."

Egyelore kifogytam az otletekbol.

-- 
  thx,
----------------------------------
Zoltan Zidarics programmer
PTE-PMMFK H-7621 Pecs, Boszorkany u. 2. Hungary
E-Mail: zamek at vili.pmmf.hu
----------------------------------



További információk a(z) Javalist levelezőlistáról