Nya metoder i JpaRepository

0 views
Skip to first unread message

Anders Asplund

unread,
Feb 22, 2011, 8:34:59 AM2/22/11
to oppna-program-dao-framework
Hej,

Idag finns det ett antal metoder för att filtrera ut entiteter ur ett
JpaRepository, alla via NamedQuery. Då jag inte är helt förtjust i att
lägga NamedQueries i entiteterna utan hellre bygger mina egna queries
i service-lagret så föreslår jag ett par nya filtreringsmetoder:

Collection<T> findByQuery(String qlString);
Collection<T> findByQuery(String qlString, Object[] args);
Collection<T> findByQuery(String qlString, Map<String, ? extends
Object> args);

I detta förslag så har jag frångått övriga api:t något genom att
returnera en Collection istf. en List.

Om vi lägger in dessa så ser inte jag något behov av att behålla
namedquery-metoderna och jag skulle isf. även kunna ta bort dessa.


Några synpunkter på detta?


//Anders


Niklas Gustavsson

unread,
Feb 22, 2011, 9:22:29 AM2/22/11
to oppna-program...@googlegroups.com
2011/2/22 Anders Asplund <aasp...@gmail.com>:

>    Collection<T> findByQuery(String qlString);
>    Collection<T> findByQuery(String qlString, Object[] args);
>    Collection<T> findByQuery(String qlString, Map<String, ? extends
> Object> args);

+1. Jag har sett ett behov av att ofta söka efter ett visst attribute,
typiskt findByFoo(). Vore trevligt med en metod för förenkla detta,
tex:

public T findByAttribute(String attributeName, Object value) {
try {
return (T) entityManager.createQuery("select e from " +
type.getSimpleName() + " e where e." + attributeName + " = :attr")
.setParameter("attr", value)
.getSingleResult();
} catch(NoResultException e) {
return null;
}
}


> I detta förslag så har jag frångått övriga api:t något genom att
> returnera en Collection istf. en List.

Låter rimligt eftersom den mycket väl kan vara ordnad.

> Om vi lägger in dessa så ser inte jag något behov av att behålla
> namedquery-metoderna och jag skulle isf. även kunna ta bort dessa.

Jag kan (i teorin) tänka mig folk som gillar NamedQuery, så jag tycker
vi kan behålla dem :-)

/niklas

Anders Asplund

unread,
Feb 22, 2011, 9:34:53 AM2/22/11
to oppna-program...@googlegroups.com

On tisdag den 22 februari 2011 at 15.22, Niklas Gustavsson wrote:

2011/2/22 Anders Asplund <aasp...@gmail.com>:
   Collection<T> findByQuery(String qlString);
   Collection<T> findByQuery(String qlString, Object[] args);
   Collection<T> findByQuery(String qlString, Map<String, ? extends
Object> args);

+1. Jag har sett ett behov av att ofta söka efter ett visst attribute,
typiskt findByFoo(). Vore trevligt med en metod för förenkla detta,
tex:

public T findByAttribute(String attributeName, Object value) {
try {
return (T) entityManager.createQuery(""select e from " +
type.getSimpleName() + " e where e." + attributeName + " = :attr")
.setParameter("attr", value)
.getSingleResult();
} catch(NoResultException e) {
return null;
}
}
Bra idé, jag lägger in en sådan med. 
Reply all
Reply to author
Forward
0 new messages