[ Resolvido ] Método remove - Hibernate

27 respostas
B

Olá Pessoal ! Boa Tarde!

Estou tentando implementar uma lógica para excluir um registro no banco, mas estou tendo problemas.

Tenho minha classe ControleCombustivel

@Entity
public class ControleCombustivel {
	
	@Id @GeneratedValue
	private long idControle;
	
	@Column(nullable = false)
	private String lote;

	@OneToOne
	@JoinColumn(name="idEquipamento")
	private Equipamento placa;

	@Type(type="org.joda.time.contrib.hibernate.PersistentLocalDateTime")
	private LocalDateTime data;

	@Column(nullable = false)
	private double litros;
	
	@Column(nullable = false)
	private BigDecimal valorUnitario;

	@OneToOne
	@JoinColumn(name="idCombustivel")
	private Material combustivel;

	@Column(nullable = false)
	@Enumerated(EnumType.STRING)
	private Documento tipo;
}

O Controller

@Delete
public void remove(ControleCombustivel cc){
	try {
		this.service.remove(cc);
	} catch (ErroExcluirException e) {
		this.result.include("msgFlash", e.getMessage());
	}
	this.result.redirectTo(this).list();
}

Na minha view tenho o seguinte

<form action='<c:url value="/controleCombustivel/remove"/>' method="post">
	<input type="hidden" name="cc.idControle" value="${c.idControle}" />
	<button type="submit" name="_method" value="DELETE">Remover</button>
</form>

Quando eu clico em Remover lá no Browser, a seguinte exception é lançada no console

16:26:03,542 DEBUG [ExecuteMethodInterceptor] Invoking ControleCombustivelController.remove(ControleCombustivel)
org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.nextrans.erp.modelo.ControleCombustivel.lote
	at org.hibernate.engine.Nullability.checkNullability(Nullability.java:100)

Com certeza é por causa da anotação

@Column(nullable = false)
private String lote;

Só que eu preciso dela, esse atributo não pode mesmo ser nulo.
E eu não quero ter que setar esse atributo lá no form de excluir na minha view.

Existe alguma outra alternativa ?

Agradeço desde já.

27 Respostas

R

A parte de DAO você está usando com Hibernate / JPA ?
Caso esteje, é necessário vc recuperar a entidade inteira primeiro antes de chamar o método remove
[]s

L

faca um cascade p/ combustivel

B

rodrigo.manfre:
A parte de DAO você está usando com Hibernate / JPA ?
Caso esteje, é necessário vc recuperar a entidade inteira primeiro antes de chamar o método remove
[]s

Estou usando Hibernate sim Rodrigo.
Existe alguma alternativa pra fazer isso ?
Eu posso implementar de outra maneira, sei lá. Não parece uma boa ideia ter que carregar tudo pra depois excluir.
Mas, tudo bem, se não houver outra maneira, esse é o caminho rs.

Como assim ?
Está dizendo para eu carregar a entidade completa, que nem o Rodrigo falou ?

R

Fazer um cascade, só vai estar dizendo para fazer as exclusões das entidades relacionadas a entidade principal, pelo que entendi não é esse o problema que ele está tendo.
Acho que o primeiro teste a fazer é recuperar a entidade primeiro pelo código para você ter ela completa, ai sim mandar excluir, não sei se você setar somente o código vai funcionar
[]s

R

bglbruno:
rodrigo.manfre:
A parte de DAO você está usando com Hibernate / JPA ?
Caso esteje, é necessário vc recuperar a entidade inteira primeiro antes de chamar o método remove
[]s

Estou usando Hibernate sim Rodrigo.
Existe alguma alternativa pra fazer isso ?
Eu posso implementar de outra maneira, sei lá. Não parece uma boa ideia ter que carregar tudo pra depois excluir.
Mas, tudo bem, se não houver outra maneira, esse é o caminho rs.

Como assim ?
Está dizendo para eu carregar a entidade completa, que nem o Rodrigo falou ?

R

Ta estranho isso viu, por acabei de fazer um teste aqui setando somente o código na entidade e ele remove normalmente, estranho estar dando erro de not-null, pois vc está tentando excluir e não inserir ou alterar, o Hibernate não deveria verificar isso no remove, o método do hibernate no DAO está certo, está mesmo usando o remove?
Att

B

rodrigo.manfre:
Ta estranho isso viu, por acabei de fazer um teste aqui setando somente o código na entidade e ele remove normalmente, estranho estar dando erro de not-null, pois vc está tentando excluir e não inserir ou alterar, o Hibernate não deveria verificar isso no remove, o método do hibernate no DAO está certo, está mesmo usando o remove?
Att

Estou sim

public void remove(ControleCombustivel c) throws ErroExcluirException {
	try {
		this.session.delete(c);	
	} catch (Exception e) {
		e.printStackTrace();
		throw new ErroExcluirException("Erro ao excluir controle de combustível");
	}
}

Também acho isso muito estranho.

Fiz do jeito que faleou, dei um load na entidade e depois mandei remover e removeu sem crise.

R

bglbruno:
rodrigo.manfre:
Ta estranho isso viu, por acabei de fazer um teste aqui setando somente o código na entidade e ele remove normalmente, estranho estar dando erro de not-null, pois vc está tentando excluir e não inserir ou alterar, o Hibernate não deveria verificar isso no remove, o método do hibernate no DAO está certo, está mesmo usando o remove?
Att

Estou sim

public void remove(ControleCombustivel c) throws ErroExcluirException {
	try {
		this.session.delete(c);	
	} catch (Exception e) {
		e.printStackTrace();
		throw new ErroExcluirException("Erro ao excluir controle de combustível");
	}
}

Também acho isso muito estranho.

Fiz do jeito que faleou, dei um load na entidade e depois mandei remover e removeu sem crise.

Bom, se funcionou blz, mas uma hora que tiver um tempo da uma olhada melhor nisso, por que deveria funcionar setando somente o código também, você viu o que está na saindo na query? Da uma olhanda se do outro jeito a query monta um delete TABELA where CHAVE = ? pode ser que tenha alguma problema no relacionamento ou algo assim, qualquer coisa tenta tirar as entidades relacionadas e tenta excluir somente com o código pra ver o que vai acontecer, assim você eliminando algumas possibilidades
Att

B

rodrigo.manfre:

Bom, se funcionou blz, mas uma hora que tiver um tempo da uma olhada melhor nisso, por que deveria funcionar setando somente o código também, você viu o que está na saindo na query? Da uma olhanda se do outro jeito a query monta um delete TABELA where CHAVE = ? pode ser que tenha alguma problema no relacionamento ou algo assim, qualquer coisa tenta tirar as entidades relacionadas e tenta excluir somente com o código pra ver o que vai acontecer, assim você eliminando algumas possibilidades
Att

Sim, em outras telas ele exclui normal só com o id setado.
E monta a query normal.

Hibernate: 
    delete 
    from
        Material 
    where
        idMaterial=?

A Query pra excluir o ControleCombustivel também é identica.

Eu acho que quem reclama é o vraptor, sei lá cara.
Porque quem vai popular meu objeto é o VRaptor, certo ?
Será que o VRaptor + Hibernate fazem alguma interação, sei lá e o hibernate diz pro VRaptor que ele não pode popular um objeto, com o atributo lote nulo ?

@Column(nullable = false)  
private String lote;

Como vocês fazem pra excluir algum objeto com relacionamentos ?

L

bom, o VRaptor não faz nada quanto a isso…

o problema é que bizarramente o hibernate está executando as validações da entidade no método delete… ele não deveria fazer isso (pode ser que vc esteja com uma versão antiga do hibernate).

a tática de fazer um load antes do delete é boa, e inclusive é a padrão na JPA. O load não vai fazer um select novo no banco, então é só deixar como:

session.delete(session.load(ControleCombustivel.class, c.getId()));
B

É, o problema não é nas relações nem nada.
O Problema é com a anotação

@Column(nullable = false)

Mas, agora eu não sei como resolver.
Preciso que esse atributo seja Not Null.
E quero que ele seja excluído sem precisar carregar ele todo, pois perde muito em performance.

Alguém sabe outra maneira de configurar/fazer isso ?

L

bglbruno, o load não faz o select no banco nesse caso… pode usá-lo sem problemas (se não acredita deixa o show_sql ligado ;))

B

Lucas, desculpe se foi essa a impressão que passei. Mas, não é nada desse gênero.

Mas, cara. Dê uma olhada no log. meu show_sql já estava ligado

11:20:17,268 DEBUG [DefaultResourceTranslator] trying to access /controleCombustivel/remove
11:20:17,270 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: ControleCombustivelController.removeControleCombustivelController.remove(ControleCombustivel)]
11:20:17,301 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
11:20:17,304 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
11:20:17,305 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
11:20:17,316 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor LoginInterceptor
11:20:17,318 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor HibernateTransactionInterceptor
11:20:17,440 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
11:20:17,449 DEBUG [JstlLocalization    ] couldn't find message bundle, creating an empty one
11:20:17,450 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for ControleCombustivelController.remove(ControleCombustivel) as [cc]
11:20:17,486 DEBUG [OgnlParametersProvider] Applying idControle with [16]
11:20:17,543 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: ControleCombustivelController.removeControleCombustivelController.remove(ControleCombustivel)] are [br.com.nextrans.erp.modelo.ControleCombustivel@88e83d]
11:20:17,546 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
11:20:17,546 DEBUG [ExecuteMethodInterceptor] Invoking ControleCombustivelController.remove(ControleCombustivel)
Hibernate: 
    select
        controleco0_.idControle as idControle7_3_,
        controleco0_.idCombustivel as idCombus8_7_3_,
        controleco0_.data as data7_3_,
        controleco0_.dataDocumento as dataDocu3_7_3_,
        controleco0_.litros as litros7_3_,
        controleco0_.lote as lote7_3_,
        controleco0_.idEquipamento as idEquipa9_7_3_,
        controleco0_.tipo as tipo7_3_,
        controleco0_.valorUnitario as valorUni7_7_3_,
        material1_.idMaterial as idMaterial6_0_,
        material1_.custoPadrao as custoPad2_6_0_,
        material1_.descricao as descricao6_0_,
        material1_.estocavel as estocavel6_0_,
        material1_.fabricante as fabricante6_0_,
        material1_.marca as marca6_0_,
        material1_.modelo as modelo6_0_,
        material1_.idSubGrupo as idSubGrupo6_0_,
        material1_.unidadeMedida as unidadeM8_6_0_,
        subgrupoma2_.idSubGrupo as idSubGrupo5_1_,
        subgrupoma2_.idContaCredito as idContaC3_5_1_,
        subgrupoma2_.idContaDebito as idContaD4_5_1_,
        subgrupoma2_.idGrupo as idGrupo5_1_,
        subgrupoma2_.nome as nome5_1_,
        equipament3_.idEquipamento as idEquipa1_8_2_,
        equipament3_.placa as placa8_2_ 
    from
        ControleCombustivel controleco0_ 
    left outer join
        Material material1_ 
            on controleco0_.idCombustivel=material1_.idMaterial 
    left outer join
        SubGrupoMaterial subgrupoma2_ 
            on material1_.idSubGrupo=subgrupoma2_.idSubGrupo 
    left outer join
        Equipamento equipament3_ 
            on controleco0_.idEquipamento=equipament3_.idEquipamento 
    where
        controleco0_.idControle=?
11:20:17,845 DEBUG [DefaultLogicResult  ] redirecting to class ControleCombustivelController
11:20:18,058 DEBUG [DefaultLogicResult  ] redirecting to /erpNextrans/controleCombustivel/list
11:20:18,060 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ForwardToDefaultViewInterceptor
11:20:18,060 DEBUG [ForwardToDefaultViewInterceptor] Request already dispatched and commited somewhere else, not forwarding.
Hibernate: 
    delete 
    from
        ControleCombustivel 
    where
        idControle=?
11:20:18,448 DEBUG [VRaptor             ] VRaptor ended the request
11:20:18,455 DEBUG [VRaptor             ] VRaptor received a new request
11:20:18,463 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
11:20:18,463 DEBUG [DefaultResourceTranslator] trying to access /controleCombustivel/list

Ele fez o select, não fez ?

No meu método remove eu fiz dessa maneira

public void remove(ControleCombustivel c) throws ErroExcluirException {
	try {
		this.session.delete( this.session.load(ControleCombustivel.class, c.getIdControle()) );
	} catch (Exception e) {
		e.printStackTrace();
		throw new ErroExcluirException("Erro ao excluir controle de combustível");
	}
}
L

qual versão do hibernate vc tá usando?

B

É a 3.6.7.

B

Não sei se é necessário, pro meu projeto.
Ou se ajuda ou não.
Mas, também tenho as libs:

  • hibernate-jpa-2.0-api-1.0.0.Final
  • hibernate-jpamodelgen-1.0.0.Final
L

se vc não usa o JPA vc não precisa dessas duas libs

L

na verdade, se vc acha que não é muito complicado, seria legal trocar o sistema pra usar a JPA.

no EntityManager esse problema não acontece…

quanto a esse problema do not-null, numa googlada rápida, tem várias pessoas falando dele e os workarounds são fazer o load, ou setar qqer coisa nos campos not-null.

o equivalente na JPA não faz o select

B

Bom, eu removi as lib, e deu o seguinte erro

23/08/2011 11:40:55 org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter vraptor
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactoryCreator': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/persistence/EntityListeners
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1413)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
	at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.start(SpringBasedContainer.java:106)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:87)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:103)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4071)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4725)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
	at org.apache.catalina.core.StandardService.start(StandardService.java:525)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.NoClassDefFoundError: javax/persistence/EntityListeners
	at org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.getDefaults(JPAMetadataProvider.java:96)
	at org.hibernate.annotations.common.reflection.java.JavaReflectionManager.getDefaults(JavaReflectionManager.java:226)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1385)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1856)
	at br.com.caelum.vraptor.util.hibernate.SessionFactoryCreator.create(SessionFactoryCreator.java:43)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:340)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:293)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130)
	... 33 more
Caused by: java.lang.ClassNotFoundException: javax.persistence.EntityListeners
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
	... 45 more
23/08/2011 11:40:55 org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
23/08/2011 11:40:55 org.apache.catalina.core.StandardContext start
SEVERE: Context [/erpNextrans] startup failed due to previous errors
23/08/2011 11:40:56 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor host-manager.xml
23/08/2011 11:40:56 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor manager.xml
23/08/2011 11:40:56 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
23/08/2011 11:40:56 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
23/08/2011 11:40:56 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
23/08/2011 11:40:56 org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
23/08/2011 11:40:56 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
23/08/2011 11:40:56 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
23/08/2011 11:40:56 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
23/08/2011 11:40:57 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/70  config=null
23/08/2011 11:40:57 org.apache.catalina.startup.Catalina start
INFO: Server startup in 5551 ms

Lucas Cavalcanti:
na verdade, se vc acha que não é muito complicado, seria legal trocar o sistema pra usar a JPA.

no EntityManager esse problema não acontece…

quanto a esse problema do not-null, numa googlada rápida, tem várias pessoas falando dele e os workarounds são fazer o load, ou setar qqer coisa nos campos not-null.

o equivalente na JPA não faz o select

Cara, eu to no começo do projeto, você acha melhor usar JPA ?
O Problema é que eu não manjo muito ainda, estou começando a desenvolver agora com Java.
Inclusive fiz a formação java na caelum.

L

ah… o jar da jpa é necessario sim, só o do modelgen que não (senão vc não consegue usar as anotações da JPA)

eu acho a JPA um pouco mais limpa que o hibernate. Só a Criteria do hibernate que eu acho melhor do que a da JPA, mas em todo caso vc pode usar o hibernate direto fazendo:

Session session = manager.unwrap(Session.class);

a tradução de hibernate pra JPA é bem direta… o nome dos métodos é um pouco diferente mas é fácil saber qual é qual (ex: save -> persist)

a idéia no método remove seria:

manager.remove(manager.getReference(X.class, id));
B

Legal. Vou estuda-la em casa neste fds.

Então, voltei a lib e funcionou legal.
Mas, por hora, vou ter que fazer o load mesmo antes do remove.

Valeu Lucas e Rodrigo !

R

Bom, quando você usa o remove, vc precisa passar uma entidade, e a entidade que tem todos os campos preenchidos para poder fazer a exclusão, usando o remove você vai ter que fazer o load antes, não tem jeito.

O que você pode fazer é montar uma query e fazer o delete usando o where somente pelo código, isso vai resolver
[]s

L

falha minha, ele faz o select antes de fazer o delete sim…

em todo caso isso não prejudica a performance do sistema, a menos que essas operações de remoção sejam muito frequentes.

nesse caso vc pode fazer a query de delete ao invés de usar o método

R

Bom, quando você usa o remove, vc precisa passar uma entidade, e a entidade que tem todos os campos preenchidos para poder fazer a exclusão, usando o remove você vai ter que fazer o load antes, não tem jeito.

O que você pode fazer é montar uma query e fazer o delete usando o where somente pelo código, isso vai resolver
[]s

R

Bom, quando você usa o remove, vc precisa passar uma entidade, e a entidade que tem todos os campos preenchidos para poder fazer a exclusão, usando o remove você vai ter que fazer o load antes, não tem jeito.

O que você pode fazer é montar uma query e fazer o delete usando o where somente pelo código, isso vai resolver
[]s

B

Bom, beleza :slight_smile:

Acho que o load antes resolve, essa ação de remover não vai ser executada com frequência não. Pra ser sincero quase nunca.

Valeu pela ajuda Pessoal !
Forte abraço.

R

O que vc pode fazer também é montar uma query fazendo um delete no objeto somente pela sua chave, como se fosse uma sql mesmo

Ex: String sql = “delete from seu_objeto where seu_objeto.campo = ?”, ai vc passa sua chave como parâmetro, sacou?
Assim não vai ser preciso fazer o load, e também não vai dar o erro que dava antes
Eu fiz um teste em minha entidade, realmente tem que ter ela totalmente preenchida para usar o remove

[]s

Criado 22 de agosto de 2011
Ultima resposta 23 de ago. de 2011
Respostas 27
Participantes 4