Duvidas com teste Junit

3 respostas
F

Olá pessoal, estou tentando fazer um teste de um método e me gera o seguinte erro:

javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.empresa.Funcionario.cargo
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:244)
at br.empresa.FuncionarioServiceImpl.excluir(FuncionarioServiceImpl.java:69)
at br.empresa.TestFuncionarioServiceImpl.testExcluir(TestFuncionarioServiceImpl.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.empresa.Funcionario.cargo
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:43)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:186)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:123)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:235)
... 21 more

metodo
public Object excluir(Funcionario funcionario) {
		em.getTransaction().begin();
		
        funcionario = em.merge(funcionario);
        em.remove(funcionario);

		em.getTransaction().commit();
		
		return funcionario;
	}
o teste JUnit
public void testExcluir(){
		FuncionarioServiceImpl service = new FuncionarioServiceImpl();
		Funcionario funcionario = new Funcionario();
		funcionario.getNome();
		funcionario.getCargo();
		funcionario.getSalario();
		funcionario.getHorasExtras();
		assertEquals("Fabiana", service.excluir(funcionario));
	}

3 Respostas

Andre_Fonseca
Fernanda de Souza:
Olá pessoal, estou tentando fazer um teste de um método e me gera o seguinte erro:

javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.empresa.Funcionario.cargo
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:244)
at br.empresa.FuncionarioServiceImpl.excluir(FuncionarioServiceImpl.java:69)
at br.empresa.TestFuncionarioServiceImpl.testExcluir(TestFuncionarioServiceImpl.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.empresa.Funcionario.cargo
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:43)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:186)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:123)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:235)
... 21 more

metodo
public Object excluir(Funcionario funcionario) {
		em.getTransaction().begin();
		
        funcionario = em.merge(funcionario);
        em.remove(funcionario);

		em.getTransaction().commit();
		
		return funcionario;
	}
o teste JUnit
public void testExcluir(){
		FuncionarioServiceImpl service = new FuncionarioServiceImpl();
		Funcionario funcionario = new Funcionario();
		funcionario.getNome();
		funcionario.getCargo();
		funcionario.getSalario();
		funcionario.getHorasExtras();
		assertEquals("Fabiana", service.excluir(funcionario));
	}

Tente comentar a linha

funcionario.getCargo();

Aparentemente na hora de recuperar o cargo usando o Hibernate ele está retornando null, confira o mapeamento do Hibernate..

[]´s

F

O mapeamento está correto, pois eu já tinha verificado. Mas o erro ainda persiste

Andre_Fonseca

Oi Fernada,

Você está olhando o valor da propriedade cargo antes antes de remover o funcionário??

aqui tem um tópico do GUJ que diz que você deveria fazer um load antes de remover o objeto, dê uma olhada e veja se resolve o seu problema…

aqui tem outra possível solução…

Abs

Criado 21 de julho de 2008
Ultima resposta 21 de jul. de 2008
Respostas 3
Participantes 2