java - Como faço para abrir manualmente uma sessão de hibernação? - CoreDump.pt
Como faço para abrir manualmente uma sessão de hibernação?
Eu tenho um pouco grande primavera projeto envolvendo e hibernação. Agora, eu estou apoiando certos objetos para fora da hibernação e na memória, e eu bati uma espécie de obstáculo. Eu tenho a seguinte configuração.
Uma classe contém um número de primitivas e uma classe B. B contém as primitivas e uma classe C, a qual foi previamente preguiçoso-carregado .
Agora eu tenho esta
Chamada de serviço 1:
1.) criar objeto da classe A
2.) obter objeto da classe B
3.) Conjunto B em A
4.) Adicionar um para a memória
Chamada de serviço 2:
1.) Obter uma da memória
2.) obter B de A
3.) obter C de B
4.) operar em C
Porque C é preguiçoso carregado, ele contou com uma sessão de hibernação existente para carregar-se preguiçosamente de B com hibernate, pelo menos eu acredito que isso seja assim. Agora, porém, eu preciso carregar preguiçoso , sem modificar o DAO para devolver um ID, e não existe nenhuma corrente sessão de hibernação para seqüestrar para com OpenSessionInView. Qual é a melhor maneira de ir sobre como resolver este problema, dadas as limitações? As únicas soluções que eu encontrei dependem de alteração de código inadequados ou uma sessão existente, então eu acho que eu poderia, talvez, abrir manualmente uma sessão de hibernação. Como eu iria fazer isso? Como alternativa, há uma melhor solução para este problema?
Publicado 19/05/2009 em 19:53 2009-05-19 19:53
Como uma melhor prática, você vai querer usar uma fábrica de sessão. Aqui é o Netbeans gera.
private static final Configuration configuration = new Configuration().configure();
Uma vez que você tem isso, você pode usar este código para uma transação
Note-se que a abertura de uma transação irá abrir uma sessão. Eu acredito em Hibernar pura (ao contrário JPA) você precisa de uma transação para fazer qualquer coisa, até mesmo lê.
No final do programa que você quer ter a certeza que fazer isso
Para uma solução mais sofisticada, você pode querer olhar para o gerenciamento automático de sessão / transação com Spring ou EJB. Que irá lidar com a sessão nos bastidores uma vez configurado corretamente.
Apenas re-ler sua pergunta e o seu ponto sobre IDs. Eu acredito que a abordagem SessionFactory irá trabalhar para os seus fins, a menos que você está fazendo um aplicativo de rosca múltipla. Isso ocorre porque, por padrão, o Hibernate sessões e os objetos ORM ligadas a essa sessão estão associados a apenas um segmento. Deixe-me saber se eu estou errado sobre isso.
Se você pode obter uma referência ao seu SessionFactory configurado, você deve ser capaz de apenas chamar openSession () sobre ele.
Respondeu 19/05/2009 em 20:08 2009-05-19 20:08 share
fonte usuário Brian Yarger
Se você sabe que seus objetos B pode ter do seu C referenciada, você deve recuperar os B na forma de pré-busca a C da. Por exemplo, o HQL
from B as b where b.id = :ID
from B as b left join fetch b.c where b.id = :ID
Respondeu 20/05/2009 em 18:31 2009-05-20 18:31 share
Você está usando HibernateTemplatee HibernateDaoSupportpara implementar suas DAOs? Se assim for, é por isso que os objetos estão desconectados. Mas, você deve ser capaz de usar o OpenSessionInViewInterceptornesse caso. Você fez alguma coisa para verificar que você não será capaz de usar o interceptor?
Além disso, se você optar por abrir um novo Session, o objeto na memória não será associado ao novo Session. Você vai precisar para recolocar o objeto da sessão para que o carregamento lento para trabalhar.
Basta usar Session session = new Configuration () configure () buildSessionFactory () getCurrentSession ()...; . Ou Session session = new Configuration () configure () buildSessionFactory () getOpenSession ()..;
Respondeu 10/01/2018 em 17:51 2018-01-10 17:51 share
fonte usuário Deepak Nigam
Qual é o método eficaz para lidar com as contrações palavra usando Java?
API Java para gerar Excel
Java fazer objetos aparecerem imediatamente
Não é possível localizar 1.7 JDK após instalá-lo
Como usar o layout do cartão?
Criar Jar executável para Código Selenium
Quais são as convenções de registo Informações para testes de integração?
não pode analisar projeto com sonar-maven-plugin depois do servidor de atualização do 4.0 para 4.5.1 (faltando org.sonar.plugins.java.api.JavaSettings classe)