Hibernate x ForeignKey Nula

2 respostas
M

Olá pessoal, estou com o seguinte problema. Minha tabela FUncionário tem uma ForeignKey relacionando com a tabela Conta_Contabil, mas é um campo que pode ser nulo no banco, não há obrigatoriedade de existir uma Conta_Contabil relacionada ao Funcionario.

@Entity
@Table(name="ps_funcionario")
public class Funcionario {

	@Id
	private Long 			codigo_funcionario;
       .. 
       .. 
       .. 
       ..
      @ManyToOne(fetch=FetchType.LAZY)
      @JoinColumn(name = "conta_contabil", 		referencedColumnName = "codigo_conta_contabil", nullable = true)
      private ContaContabil 	contaContabil;

       ..
       .. 
       .. 
       .. 
       ..
}
Mas quando vou gravar meu formulário sem informar uma conta_contabil dá o seguinte erro:
ERROR [vraptor2]:253 - Servlet.service() for servlet vraptor2 threw exception
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: sensatta.modelo.ContaContabil
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
	at org.hibernate.type.EntityType.replace(EntityType.java:253)
	at org.hibernate.type.TypeFactory.replace(TypeFactory.java:462)

O que ocasiona e como resolver este erro ?

Valew.

2 Respostas

edilson_x

Creio que não seja possível fazer um relacionamento com apenas um lado :roll:

Se vc relacionar a tabela funcionario com a tanela Conta_contabil, terá que existir um registro na tabela
Conta_contabil, caso contrário não há como criar um novo registro para funcionário.

M

Vamos imaginar uma situação hipotética:

Tenho a tabela FUNCIONARIO e a tabela MAE, onde 1 funcionario pode ter 0 ou 1 mãe e uma mãe pode ter 0 ou N filhos(funcionario).

Então, existe um ralacionamento, mas não é obrigatório pois o funcionário pode ser orfão.

Como tratar um caso desse de ralacionamento, de 0 para 1 e 0 para N ?

Valew.

Criado 9 de novembro de 2007
Ultima resposta 9 de nov. de 2007
Respostas 2
Participantes 2