Reputation: 173
Hibernate 3.5 JPA 1.0
The annotation @OrderBy is used only for one to many or many to many relationship on the list-field. But I want it to use for the single table, that should be ordered by some fields in a table. It is possible? Or another solution?
for example:
SELECT * FROM INTERCHANGE_KEYS order by PANEL_OPTION, KEY_NAME
I don't want to write hql for each table.
Upvotes: 2
Views: 108
Reputation: 241
You can create interface for all common actions that you use on JPA entities. This interface must have two generics. I will give you example for 2 actions (persist and findAll) but all others (merge, delete, find, ...) can be implemented, too. For example:
public interface JpaDaoBase { public void persist(E e); public List findAll(String orderProperty, OrderType orderType); }
E class should be JPA entity and K represents java type of property used for primary key (Long for example).
And implementation of interface:
public abstract class JpaDaoBaseImpl implements JpaDaoBase { protected Class entityClass; public JpaDaoBaseImpl() { this.entityClass = (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } @Override public void persist(E e) { entityManager.persist(e); } @Override public List findAll(String orderProperty, OrderType orderType) { return entityManager.createQuery( "select o from " + entityClass.getName() + " o orderby " orderProperty + + " " + orderType.toString(), entityClass) .getResultList(); } }
After that, for entity Example you crate implementation of DAO ExampleDao by extending JpaDaoBaseImpl and you will have this two methods implemented out of the box.
This is a standard way to create DAO layer in JPA (Hiberante) projects. If you use Spring you can use Spring Data JPA project (they have several standard implementations of Dao layer classes).
Upvotes: 1