Pessoal estou usando o Hibernate para fazer as persistências no banco de dados…
Acontece que eu estou criando a fabrica no método construtor dos meus JpaControllers…
public testeJpaController() {
this.emf = Persistence.createEntityManagerFactory("ttttt");
}
Acontece que toda vez que eu chamo o meu controle ele esta abrindo uma conexão e ñ esta fechando, acho que é justamente da minha fabrica!!!
Vocês podem me mostrar como eu posso criar uma única fabrica pra todos os meus JpaControllers, ou fechar ela depois de usar?
meu código jpa agora ta assim:
import hibernate.dao.exceptions.NaoExisteException;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.transaction.UserTransaction;
import modelo.Usuario;
public class UsuarioJpaController implements Serializable {
public UsuarioJpaController(UserTransaction utx, EntityManagerFactory emf) {
this.utx = utx;
this.emf = emf;
}
public UsuarioJpaController() {
//this.emf = Persistence.createEntityManagerFactory("teste");
this.emf = FactoryJPA.getInstance().criarEntityManagerFactory();
}
private UserTransaction utx = null;
private EntityManagerFactory emf = null;
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public void criar(Usuario usuario) {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.persist(usuario);
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
}
public void editar(Usuario usuario) throws NaoExisteException, Exception {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
usuario = em.merge(usuario);
em.getTransaction().commit();
} catch (Exception ex) {
String msg = ex.getLocalizedMessage();
if (msg == null || msg.length() == 0) {
Long id = usuario.getId();
if (mostraUsuario(id) == null) {
throw new NaoExisteException("o usuario com id " + id + " não existe.");
}
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}
public void deletar(Long id) throws NaoExisteException {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
Usuario teste;
try {
teste = em.getReference(Usuario.class, id);
teste.getId();
} catch (EntityNotFoundException enfe) {
throw new NaoExisteException("o usuario com id " + id + " não existe.", enfe);
}
em.remove(teste);
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
}
public List<Usuario> listarUsuario() {
return listarUsuario(true, -1, -1);
}
public List<Usuario> listarUsuario(int maxResults, int firstResult) {
return listarUsuario(false, maxResults, firstResult);
}
private List<Usuario> listarUsuario(boolean all, int maxResults, int firstResult) {
EntityManager em = getEntityManager();
try {
Query q = em.createQuery("select object(o) from Usuario as o");
if (!all) {
q.setMaxResults(maxResults);
q.setFirstResult(firstResult);
}
return q.getResultList();
} finally {
em.close();
}
}
public Usuario mostraUsuario(Long id) {
EntityManager em = getEntityManager();
try {
return em.find(Usuario.class, id);
} finally {
em.close();
}
}
public int getUsuarioCount() {
EntityManager em = getEntityManager();
try {
Query q = em.createQuery("select count(o) from Usuario as o");
return ((Long) q.getSingleResult()).intValue();
} finally {
em.close();
}
}
}
minha fabrica:
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class FactoryJPA {
private static FactoryJPA singleton;
private EntityManagerFactory emf = null;
static {
singleton = new FactoryJPA();
}
private FactoryJPA() {
emf = Persistence.createEntityManagerFactory("TesteJpaFactorySingletonPU");
}
public EntityManagerFactory criarEntityManagerFactory() {
return emf;
}
public static FactoryJPA getInstance(){
return singleton;
}
}
esta correto???
ele esta inserindo os dados no banco…
e agora depois destas alterações, só esta criando uma conexão…
o apache ta gerando os seguintes logs:
Grave: Servlet.service() for servlet jsp threw exception
org.postgresql.util.PSQLException: ERRO: valor nulo na coluna "id" viola a restrição não-nula
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:304)
at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:33)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
at hibernate.dao.UsuarioJpaController.criar(UsuarioJpaController.java:44)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:73)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:722)
Grave: Servlet.service() for servlet jsp threw exception
java.lang.IllegalArgumentException: Unknown entity: modelo.Carro
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:223)
at hibernate.dao.CarroJpaController.criar(CarroJpaController.java:45)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:94)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:722)