Olá!
Essa discussão não é muito pro meu bico, mas eu gostei de uma solução que é a seguinte: Peguei essa idéia na aplicação PetSoar, do livro Java Open Source Programming!
Tenho uma interface PersistenceManager, uma classe que implementa a PersistenceManager, e um componenete que faz uma espècie de integração entre meu objeto de negócio e o Persistence Manager… … vou postar o código, e vejam o que acham… Talvez não ajude em nada, mas é uma maneira q achei interessante de lidar com a persistência!
[code]
public interface PersistenceManager {
/**
* Save any object of domain in the database
*
* @param obj
*/
public void save(Object obj);
/**
* Remove any objet of domain from the database
*
* @param obj
*/
public void remove(Object obj);
/**
* Retrie a objet of domain from the database by id
*
* @param id
* @return UserStorie Object
*/
public Object load(Long id);
/**
* Retrieve all objects of a specific object domain.
*
* @param c Class of the object domain
* @return a collection of objects
*/
public List findAll(Class c);
}[/code]
[code]
public class HibernatePersistenceManager implements PersistenceManager {
Log log = LogFactory.getLog(HibernatePersistenceManager.class);
/* (non-Javadoc)
* @see net.java.dev.xpturbine.persistence.PersistenceManager#save(java.lang.Object)
*/
public void save(Object obj) {
try {
Session session = HibernateUtil.getSession();
session.saveOrUpdate(obj);
} catch (HibernateException e) {
log.error(e.getMessage(), e);
throw new PersistenceException(e.getMessage(), e);
}
}
/* (non-Javadoc)
* @see net.java.dev.xpturbine.persistence.PersistenceManager#remove(java.lang.Object)
*/
public void remove(Object obj) {
try {
Session session = HibernateUtil.getSession();
session.delete(obj);
} catch (HibernateException e) {
log.error(e.getMessage(), e);
throw new PersistenceException(e.getMessage(), e);
}
}
/* (non-Javadoc)
* @see net.java.dev.xpturbine.persistence.PersistenceManager#load(java.lang.Long)
*/
public Object load(Long id) {
Object obj;
try {
Session session = HibernateUtil.getSession();
obj = session.load(UserStorie.class, id);
} catch (HibernateException e) {
log.error(e.getMessage(), e);
throw new PersistenceException(e.getMessage(), e);
}
return obj;
}
/* (non-Javadoc)
* @see net.java.dev.xpturbine.persistence.PersistenceManager#findAll(java.lang.Class)
*/
public List findAll(Class cls) {
List list = Collections.EMPTY_LIST;
try {
Session session = HibernateUtil.getSession();
list = session.find("FROM userStorie IN CLASS " + cls.getName());
} catch (HibernateException e) {
log.error(e.getMessage(), e);
throw new PersistenceException(e.getMessage(), e);
}
return list;
}
}[/code]
[code]
public class ReleaseManager {
private PersistenceManager persistenceManager;
/**
* Set a persistence manager.
*
* @param persistenceManager The persistenceManager to set.
*/
public void setPersistenceManager(PersistenceManager persistenceManager) {
this.persistenceManager = persistenceManager;
}
/**
* Save a user storie in the database.
*
* @param userStorie
*/
public void saveUserStorie(UserStorie userStorie) {
persistenceManager.save(userStorie);
}
/**
* Remove a user storie from the database
*
* @param userStorie
*/
public void removeUserStorie(UserStorie userStorie) {
persistenceManager.remove(userStorie);
}
/**
* Retrieve a user storie by id from the database
*
* @param id UserStorie ident
* @return a retrieved UserStorie
*/
public UserStorie loadUserStorie(long id) {
Object storie = persistenceManager.load(new Long(id));
return (UserStorie) storie;
}
/**
* Retrievel all user stories from the database
*
* @return list of user stories
*/
public List findAllUserStories() {
List userStories = persistenceManager.findAll(UserStorie.class);
return userStories;
}
}[/code]
Ainda tem alguns errinhos e melhorias para ser feitas. Por enquanto o componente só persiste a classe UserStorie, mas em breve terei outras classes, e para cada uma delas irei acrescentando métodos para tratar dessas responsabilidades, mas enquanto isso, a classe HibernatePersistenceManager irá crescer pouco, e se manterá simples e fácil de entender!!!
Abraços!
Thiago Senna