Merge com Hibernate nao esta dando insert no bd

20 respostas
evertonsilvagomesjav

Bom dia a todos.

Estou tentando da um insert no MySQL, não gera nenhum erro o hibernate gera o insert no console mas quando vou no banco os dados nao estao la =[

metodo do insert

public <T> T atualiza(T entity, boolean executarFlush) { getEntityManager().getTransaction().begin(); getEntityManager().merge(entity); getEntityManager().getTransaction().commit(); return entity; }

CONSOLE:

16/05/2012 11:39:29 org.hibernate.annotations.common.Version <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final} 16/05/2012 11:39:29 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.0.1.Final} 16/05/2012 11:39:29 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found 16/05/2012 11:39:29 org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist 16/05/2012 11:39:29 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 16/05/2012 11:39:29 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 16/05/2012 11:39:29 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000006: Autocommit mode: true 16/05/2012 11:39:29 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/MySQL] 16/05/2012 11:39:29 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000046: Connection properties: {user=root, password=****, autocommit=true, release_mode=auto} 16/05/2012 11:39:29 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 16/05/2012 11:39:29 org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 16/05/2012 11:39:29 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory 16/05/2012 11:39:30 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000228: Running hbm2ddl schema update 16/05/2012 11:39:30 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000102: Fetching database metadata 16/05/2012 11:39:30 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000396: Updating schema 16/05/2012 11:39:30 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000261: Table found: MySQL.corretor 16/05/2012 11:39:30 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000037: Columns: [id_corretor, nome_corretor] 16/05/2012 11:39:30 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000108: Foreign keys: [] 16/05/2012 11:39:30 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000126: Indexes: [primary] 16/05/2012 11:39:30 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000232: Schema update complete Hibernate: insert into CORRETOR (NOME_CORRETOR) values (?)

E no bd nada =[

20 Respostas

Hebert_Coelho

Tenta fazer ae getEntityManager().flush();

Após o commit.

evertonsilvagomesjav

apos o commit da exception, agora eu usei o flush depois do merge mas ficou do mesmo jeito

Hebert_Coelho

evertonsilvagomesjava:
apos o commit da exception, agora eu usei o flush depois do merge mas ficou do mesmo jeito
Se após o commit dá exception então não vai rolar o insert mesmo. :stuck_out_tongue:

Qual o erro?

Hebert_Coelho

Commit != persistir dados no banco de dados.

Commit significa que você marcou os objetos para serem persistidos, mas eles só serão ao final da transação ou após um flush().

evertonsilvagomesjav

Hum entendi o commit, mas a exception e essa que ocorre quando uso o flush depois do commit.

javax.persistence.TransactionRequiredException: no transaction is in progress at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:970) at br.com.daos.GenericDaoBeanAgenciaTurismo.atualiza(GenericDaoBeanAgenciaTurismo.java:249) at br.com.daos.GenericDaoBeanAgenciaTurismo.atualiza(GenericDaoBeanAgenciaTurismo.java:242) at br.com.fachada.services.CorretorService.insereCorretor(CorretorService.java:10) at br.com.controller.Controller.insereCorretor(Controller.java:17) at br.com.view.CadastroCorretor$1.actionPerformed(CadastroCorretor.java:204) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$000(Unknown Source) at java.awt.EventQueue$1.run(Unknown Source) at java.awt.EventQueue$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.Dialog$1.run(Unknown Source) at java.awt.Dialog$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Dialog.show(Unknown Source) at java.awt.Component.show(Unknown Source) at java.awt.Component.setVisible(Unknown Source) at java.awt.Window.setVisible(Unknown Source) at java.awt.Dialog.setVisible(Unknown Source) at br.com.view.Gui$2.actionPerformed(Gui.java:77) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.AbstractButton.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$000(Unknown Source) at java.awt.EventQueue$1.run(Unknown Source) at java.awt.EventQueue$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

evertonsilvagomesjav

Fala q nao tem transação em progresso, sabe como resolver?

TiagoCedrim

Parceiro, posta pra gente o XML que você criou para mapear o BD.

evertonsilvagomesjav

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence">
	<persistence-unit name="AgenciaTurismoEntityManager" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>			
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/MySQL"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
            <property name="hibernate.connection.password" value="evertonjava" />
            <property name="hibernate.connection.username" value="root" />           
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> 	
            <property name="hibernate.show_sql" value="true"/> 	
		</properties>
	</persistence-unit>

</persistence>
TiagoCedrim
evertonsilvagomesjava:
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence">
	<persistence-unit name="AgenciaTurismoEntityManager" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>			
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/MySQL"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
            <property name="hibernate.connection.password" value="evertonjava" />
            <property name="hibernate.connection.username" value="root" />           
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> 	
            <property name="hibernate.show_sql" value="true"/> 	
		</properties>
	</persistence-unit>

</persistence>
Insere essa linha no teu XML
<property name="hibernate.hbm2ddl.auto" value="update"/>
evertonsilvagomesjav

ela ja tava, eu tirei e continuou mesma coisa =[

TiagoCedrim

Então o problema deve ser outro, mas sem essa linha de código você não vai conseguir inserir no banco.

evertonsilvagomesjav

Tenso velho, nao sei mais o que fazer =[

Hebert_Coelho

TiagoCedrim:
Insere essa linha no teu XML

<property name="hibernate.hbm2ddl.auto" value="update"/>

Na boa, essa linha vai ajudar em nada… O.o

Olha oq o erro está falando… Onde/Como você está iniciando a transação?

evertonsilvagomesjav

Eu recupero meu entityManager aqui:

public static GenericDaoBeanAgenciaTurismo getInstance(){ if(dao == null){ return dao = new GenericDaoBeanAgenciaTurismo(HibernateUtils.getEntityManager()); }else{ return dao; } }

public static EntityManager getEntityManager(){ if(em == null){ EntityManagerFactory emf = Persistence.createEntityManagerFactory("AgenciaTurismoEntityManager"); em = emf.createEntityManager(); } return em; }

evertonsilvagomesjav

Velho no Oracle funciona :shock:

Hebert_Coelho

E como está seu código agora?

evertonsilvagomesjav

ta do mesmo jeito so mudei o persistence.xml pra funcionar no oracle.

evertonsilvagomesjav

a parte de inserção ta assim

getEntityManager().getTransaction().begin(); getEntityManager().merge(entity); getEntityManager().getTransaction().commit();

Hebert_Coelho

E se tu colocar o flush no final, para o oracle, dá aquele erro?

evertonsilvagomesjav

da o mesmo erro…
velho, que coisa escrota essa do mysql nao entendi =/

Criado 16 de maio de 2012
Ultima resposta 16 de mai. de 2012
Respostas 20
Participantes 3