Como quem baixou e usou o Hibernate 4 viu, o método buildSessionFactory() esta marcado como deprecated nesta nova versão…
Com a introdução do ServiceRegistry o framework mudou a forma de como ele vai criar e gerenciar as sessões. Agora usa-se buildSessionFactory(ServiceRegistry service)
Para dar uma luz pra galera que ta meio perdida ainda de o que usar no lugar do buildSessionFactory() (que vai ser removida na versão 5 do HiB) fiz um pequeno tutorial colocando um HibernateUtils de exemplo para dar um início na sua pesquisa…
http://arthurgregorio.eti.br/blog/79-programacao/java/96-buildsessionfactory-hibernate-4
Se alguém aqui já estiver utilizando uma solução mais madura do que essa que estou propondo e quiser compartilhar!
Se houver alguma melhora nesse código vou atualizar o post… (Y)
falow galera!
Uma coisa que eu achei meio estranha foi que na documentação oficial da versão 4 ainda estão utilizando o método buildSessionFactory()…
Pois é… ta um “Coming soon…” lá onde deveriam estar explicando onde usar… eahaeuhhauuhea complicado mudarem algo mas “não mostrarem” como fazer pra usar…
Link: http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html_single/#services-registry-sessionfactory
Então… bem escondido isso aí. Eu já mexia com a 3, mas resolvi dar uma olhada começando pelo “Getting Started Guide”, pra dar uma olhada na documentação, e lá eles ainda tão usando o método deprecated. Pra quem tá começando isso é meio tenso… é como se falassem “olha, vai quebrando o galho com isso que depois eu ajeito”. Mas enfim, vamos esperar, afinal a versão 4 acabou de sair.
Olá, camarada.
Boa iniciativa.
Há algum tempo notei a mesma coisa. Como ministro cursos de hibernate, precisava me atualizar.
Porém, a dificuldade era esta, não poderia iniciar algo, sem a documentação oficial estar 100%.
De qualquer maneira, teu exemplo é bem interessante, funcional (mesmo com Oracle XE).
Parabéns pela iniciativa, vamos aguardar o que o pessoal da JBoss Comunity trará. Espero que não demore.
[quote=drsmachado]Olá, camarada.
Boa iniciativa.
Há algum tempo notei a mesma coisa. Como ministro cursos de hibernate, precisava me atualizar.
Porém, a dificuldade era esta, não poderia iniciar algo, sem a documentação oficial estar 100%.
De qualquer maneira, teu exemplo é bem interessante, funcional (mesmo com Oracle XE).
Parabéns pela iniciativa, vamos aguardar o que o pessoal da JBoss Comunity trará. Espero que não demore.[/quote]
Valew cara!
pois eh! a galera da JB me parece estar meio largada… não é primeira vez que vejo um novo release do Hibernate sair e não ter documentação para algumas das novas funcionalidades…
retirado de http://stackoverflow.com/questions/8621906/is-buildsessionfactory-deprecated-in-hibernate-4
[code]private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
private static SessionFactory configureSessionFactory() throws HibernateException {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}[/code]
isso resolve …
gregorioarthur tentei seguir seu tutorial, pore´m estou tendo o sequinte erro:
Exception in thread "main" org.hibernate.metamodel.source.MappingException: Unable to create stax reader
at org.hibernate.service.internal.JaxbProcessor.unmarshal(JaxbProcessor.java:80)
at org.hibernate.service.ServiceRegistryBuilder.configure(ServiceRegistryBuilder.java:162)
at org.hibernate.service.ServiceRegistryBuilder.configure(ServiceRegistryBuilder.java:147)
at br.com.fj28.test.AdicaoDeProduto.main(AdicaoDeProduto.java:27)
Caused by: javax.xml.stream.XMLStreamException: java.net.MalformedURLException
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.<init>(Unknown Source)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.getXMLStreamReaderImpl(Unknown Source)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLStreamReader(Unknown Source)
at org.hibernate.service.internal.JaxbProcessor.unmarshal(JaxbProcessor.java:67)
... 3 more
Caused by: java.net.MalformedURLException
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDocumentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.setInputSource(Unknown Source)
... 8 more
Caused by: java.lang.NullPointerException
... 15 more
O meu código porenquanto esta assim:
[code]Configuration cfg = new Configuration();
cfg.setProperty(“hibernate.connection.driver_class”, “com.mysql.jdbc.Driver”);
cfg.setProperty(“hibernate.connection.url”, “jdbc:mysql://127.0.0.1:3306/my_db”);
cfg.setProperty(“hibernate.connection.username”, “username”);
cfg.setProperty(“hibernate.connection.password”, “passw”);
cfg.setProperty(“hibernate.show_sql”, “true”);
cfg.setProperty(“hibernate.dialect”, “org.hibernate.dialect.MySQL5InnoDBDialect”);
cfg.setProperty(“hibernate.connection.autocommit”, “false”);
cfg.setProperty(“hibernate.c3p0.min_size”, “5”);
cfg.setProperty(“hibernate.c3p0.max_size”, “20”);
cfg.setProperty(“hibernate.c3p0.timeout”, “1800”);
cfg.setProperty(“hibernate.c3p0.max_statements”, “50”);
cfg.setProperty(“hibernate.hbm2ddl.auto”, “update”);
cfg.setProperty(“hibernate.cache.provider_class”, “org.hibernate.cache.NoCacheProvider”);
cfg.setProperty(“hibernate.transaction.factory_class”, “org.hibernate.transaction.JDBCTransactionFactory”);
cfg.setProperty(“hibernate.current_session_context_class”, “thread”);
cfg.setProperty(“hibernate.generate_statistics”, “true”);
ServiceRegistryBuilder builder = new ServiceRegistryBuilder();
builder.applySettings(cfg.getProperties());
ServiceRegistry serviceRegistry = builder.configure().buildServiceRegistry();
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
metadataSources.addAnnotatedClass(Produto.class);
SessionFactory sessionFactory = metadataSources.buildMetadata().buildSessionFactory();[/code]
Pode me ajudar?
Muito Obrigado
A chamada builder.configure() espera que em seu projeto tenha um hibernate.cfg.xml.
Crie um configuration e informe as properties de configuração do hibernate, build o service registry sem chamar o configure.
Configuration cfg = new Configuration();
cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
(...)
ServiceRegistryBuilder builder = new ServiceRegistryBuilder();
builder.applySettings(cfg.getProperties());
ServiceRegistry serviceRegistry = builder.buildServiceRegistry();