orphanRemoval em @OneToOne

Tenho o seguinte mapeamento:

public class Venda
{

...

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="endereco_entrega")
private EnderecoEntrega enderecoEntrega;

...

}

public class EnderecoCobranca
{
private String nome;
private String logradouro;
...
//Não tem o relacionamento com a venda. Esta mapeada somente no lado da venda.
}

O relacionamento está mapeado somente na parte da venda, pois posso usar esse endereço de entrega em outras entidades do sistema.

O problema acontece quando eu tenho um endereço de cobrança vinculado com a venda.
Se ocorre uma alteração na venda, para usar o mesmo endereço de entrega que o principal do cliente. A propriedade endereco_entrega fica NULL na tabela de vendas e o endereco de cobrança que estava vinculando anteriormente fica “perdido” no banco de dados.

Como eu poderia fazer para excluir esse endereço de cobrança ao mudar a propriedade do pedido para NULL?

Tentei usar orphanRemoval no mapeamento, mas ocorre o seguinte erro: (provavelmente porque atribui um valor nulo ao campo)

[quote]Caused by: java.lang.NullPointerException
at org.hibernate.engine.EntityEntry.getLoadedValue(EntityEntry.java:255)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:232)
at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
at org.hibernate.engine.Cascade.cascade(Cascade.java:127)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:376)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:350)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:677)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:669)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:665)

… 25 more[/quote]

Poderia verificar ao salvar o pedido se tinha um valor diferente vinculado antes, se tivesse pegava o código e excluia. Mas, com isso perderia um pouco de perfomance.

Alguma outra ideia?