J'ai obtenu plusieurs classes DAO qui s'étendent à un BaseDAO, et j'ouvre une nouvelle session dans le BaseDAO de sorte que tous les DAO utilisent la même session.Hibernate session usine une nouvelle session pour plusieurs DAO
@Autowired
public BaseDAOImpl(SessionFactory sessionFactory) {
super(sessionFactory);
this.mySession = sessionFactory.openSession();
logger.info("My Session is Open.");
}
public Session getMySession(){
return this.mySession;
}
@Repository("countryDAO")
public class CountryDAOImpl extends BaseDAOImpl<Country> implements CountryDAO{
@Autowired
public CountryDAOImpl(SessionFactory sessionFactory) {
super(sessionFactory);
}
}
@Repository("regionDAO")
public class RegionDAOImpl extends BaseDAOImpl<Region> implements RegionDAO{
@Autowired
public RegionDAOImpl(SessionFactory sessionFactory) {
super(sessionFactory);
}
}
Dans ma classe de service I auto-câblage 2 DAO.
@Autowired
CountryDAO countryDAO;
@Autowired
RegionDAO regionDAO;
Dans ma console, j'ai vu que Ma session est ouverte deux fois. Cela signifie-t-il qu'il ouvre 2 nouvelles sessions? Je ne veux pas utiliser la session en cours pour une raison quelconque, donc j'utilise openSession(). Quand je fais countryDAO.getMySession(). Clear() il efface seulement l'entité chargée dans la session countryDAO mais pas regionDAO.
Comment puis-je utiliser seulement 1 session pour tous les DAO? –
Mon programme a une boucle et j'ai besoin de valider chaque boucle, donc je ne veux pas utiliser getCurrentSession() –
Je ne suis pas sûr de votre besoin. Vous devriez ajouter votre boucle et "commettre chaque boucle" à votre question. – Rocherlee