Forma elegante de trabajar con la JPA

dagavi

Mirando Strusts 2 y JPA, con esta última siempre me surgen dudas de si como planteo las cosas es correcto o bien hay mejores formas de hacerlo.

¿Alguno que tenga experiencia podría indicar si esta es una forma correcta / elegante de trabajar con la JPA o bien dar consejos de como se deberían realizar las cosas?

Pongo una clase de ejemplo para que veáis como lo planteo actualmente:
Es una clase que ofrece las operaciones CRUD para una clase "Post" (pongamos que es para hacer un blog, twitter, etc. Algo para escribir mensajes en la web creada sobre Struts 2).

public class PostActions extends ActionSupport {
    
private Post post; // {long id, String titulo, String mensaje} public String create() { EntityManager em = EMF.get().createEntityManager(); em.getTransaction().begin(); em.persist(post); em.getTransaction().commit(); em.close(); return SUCCESS; } public String read() { EntityManager em = EMF.get().createEntityManager(); post = em.find(Post.class, post.getId()); em.close(); return SUCCESS; } public String update() { EntityManager em = EMF.get().createEntityManager(); Post originalPost = em.find(Post.class, post.getId()); // Check post existe y es mío originalPost.setTitle(post.getTitle()); originalPost.setMessage(post.getMessage()); em.getTransaction().begin(); em.merge(originalPost); em.getTransaction().commit(); em.close(); return SUCCESS; } public String delete() { EntityManager em = EMF.get().createEntityManager(); post = em.find(Post.class, post.getId()); // Check post existe y es mío em.getTransaction().begin(); em.remove(post); em.getTransaction().commit(); em.close(); return SUCCESS; } }

El "create" me imagino que más o menos estará correcto, puesto que no hay mucho más misterio. Mi duda es especialmente el resto de operaciones.

Supongo que los "find" no los puedo quitar, como mínimo por segurida. Por ejemplo, al actualizar y borrar debería obtener el post con ID indicada y comprobar que es mio realmente, a no ser que esto lo hiciera en la validación de datos (¿esto debería ir en el validate() de strusts 2? No se si considerarlo validación de entrada o bien ya es parte de la lógica de negocio, que puede detectar más errores como que el post no es mío)

dagavi

Por si a alguien le interesa: Mas o menos he encontrado una solución / forma bonita de hacer las cosas. Está en el libro (hay el pdf) Stursts 2 in Action, hay un tema dedicado a las operaciones CRUD usando JPA, en el que hacen uso de la interfaz Preparable + desactivan la validación de ciertas operaciones.

Usuarios habituales

  • dagavi