Sessão: é uma sessão entre o aplicativo e o banco de dados, o centro da operação de hibernato e a base das operações da camada de persistência. O ciclo de vida dos objetos/gerenciamento de transações/acesso ao banco de dados está intimamente relacionado à sessão.
O objeto de sessão é construído através do SessionFactory. Aqui está um exemplo para introduzir duas maneiras de obter sessões por Hibernate.
Os logs são uma preocupação muito comum na programação. Quando os usuários operam em bancos de dados, eles precisam gravar essa série de operações para rastrear a dinâmica do banco de dados. Portanto, quando um usuário insere um registro no banco de dados, ele deve registrar um registro no arquivo de log. A série de operações do usuário deve ser realizada em uma sessão, caso contrário, isso se tornará dois threads. Não há garantia de sincronização. Veja o seguinte código
Ferramentas de sessão de gerenciamento de Hibernateutil
pacote com.bjpowernode.usermgr.util; importar org.hibernate.session; // hibernate3 de importação de org.hibernate.sessionFactory; importar org.hibernate.cfg.configuration; public class hibernateUtils {private STATIONFACTORY; Configuration (). Configure (); // Crie SessionFactory Factory = cfg.buildSessionFactory ();} Catch (Exceção e) {E.PrintStackTrace ();}} // Obtenha a sessão aberta public static session () {Return Factory.openssion ();} // Close Public Static Void Void () {) sessão) {if (session! = null) {if (session.isopen ()) {session.close ();}}} public static sessionFactory getSessionFactory () {retornar fábrica;}}}Camada de lógica de negócios do usuário
pacote com.bjpowernode.usermgr.manager; importar java.util.date; importar org.hibernate.session; importar com.bjpowernode.usermgr.domain.log; import.bjPowerMemmemMentsNode.Usermgr.Domain.User; import.bjPowerNode.UsMermgr.utilIlil.Irmermgr.Domain.User; import.bjpowernode.USMERMG.UTILILILILSRATILSTR.IMERMERNATEMENTETIMATEMENTETIMATEMENTETIMATROMENT (IMUSERMANTELSETIRILSETILS) Adicionar usuários e adicionar logs Use a mesma sessão, então * Ao adicionar falhas de usuários, os logs também falharão. Rollback da transação* O usuário adiciona logs de sucesso e também adicionará sucesso*/public void adduser (usuário do usuário) {session session = null; tente {// obtenha a sessão de thread atual = HibernateUtils.getSessionFactory (). Log "); log.setTime (new Date ()); log.setDetail (" xxx "); logManager LogManager = new LogManagerImpl (); // Salvar logs logManager.addlog (log); session.getTransaction (). Commit ();} catch (exceção e) {e.PrintTack ();Classe de implementação de log:
pacote com.bjpowernode.usermgr.manager; importar org.hibernate.session; importação com.bjpowernode.usermgr.domain.log; importar com.bjpowernode.usermgr.util.hibernateutils; classe pública LogManagerImpl implementa o logmanager {public void (loglog) {log log) {logn; HibernateUtils.getSessionFactory (). GetCurrentSession (). Salvar (log);}}Classe de teste
pacote com.bjPowerNode.Usermgr.Manager; import junit.framework.testcase; importação com.bjpowernode.usermgr.domain.user; public class, userManagerImpltest estende o teste {public void TestAdDuser () {userManager = userManagerImpl (); user.setName ("Zhang San"); userManager.adduser (usuário); }Perceber:
1. Qual é a diferença entre o OpenSession e GetCurrentSession?
*O OpenSession deve ser fechado, o CurrentSession será fechado automaticamente após a conclusão da transação.
*OpenSession não está vinculado ao fio atual, o CurrentSession está ligado ao fio atual
2. Se você usar o CurrentSession, precisará configurá -lo no arquivo hibernate.cfg.xml:
*Se for uma transação local (transação JDBC)
<PropertyName = "Hibernate.Current_Session_Context_Class"> Thread </Property>
*Se for uma transação global (transação JTA)
)
Transações globais: transações gerenciadas e coordenadas pelo Explorer que podem abranger vários bancos de dados e processos. O gerenciador de recursos geralmente usa o protocolo de envio de dois estágios do XA para interagir com o "Sistema de Informações da Enterprise" (EIS) ou banco de dados.
Transações locais: transações locais para um único EIS ou banco de dados e restritas a um único processo. As transações locais não envolvem várias fontes de dados.
Resumir
O exposto acima é o conteúdo inteiro deste artigo sobre os dois exemplos de código de obtenção de sessão no Hibernate. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a:
Análise da instância de adicionar, excluir, revisar e pesquisar através da sessão
Aprenda rapidamente sobre sessão em hibernado
Hibernate usa o HBM.XML para configurar a análise de relacionamento de mapeamento
Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!