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)