[Hibernate] Salvar classe filha que herda de uma classe JOINED

0 respostas
Willian_Antunes

Pessoal,

Estou com o seguinte problema, tenho a seguinte estrutura:

Uma classe abstrata somente com id:

@MappedSuperclass
public class AbstractEntity 
{
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long id;

}

A classe Usuário que herda a AbstractEntity e é do tipo JOINED:

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Usuario extends AbstractEntity
{		
	// Atributos
}

E tenho a classe funcionário que herda de usuário:

@Entity
public class Funcionario extends Usuario
{
	// Atributos
}

Dessa maneira o Hibernate cria uma tabela para o usuário e outra para o funcionário. Eu já tenho usuários cadastrados e gostaria que eles fossem funcionários, porém quando eu faço isso da o seguinte erro:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '6' for key 'UK_37635c6150464f8cb9538e9d441'

Creio que seja por causa do GeneratedValue. Alguém sabe um meio para resolver isso? Segue código que estou usando para salvar o funcionário:

@Get("/fornecedores/funcionarios/add/{id}")
public void insertFuncionario(Long id) throws CommonException
{	
	Usuario dbUsr = this.usuarioRepository. find(id);
	Fornecedor dbForn = this.fornecedorRepository.find(this.fornecedorSession.getFornecedor().getId());
	
	Funcionario func = new Funcionario();
	Fornecedor forn = new Fornecedor();	
	
	forn.setId(dbForn.getId());
	func.setFornecedor(forn);
	func.setNome(dbUsr.getNome());
	func.setDataCadastro(dbUsr.getDataCadastro());
	func.setDataNascimento(dbUsr.getDataNascimento());
	func.setDescricao("");
	func.setEmail(dbUsr.getEmail());
	func.setId(dbUsr.getId());
	func.setLogin(dbUsr.getLogin());
	func.setPassword(dbUsr.getPassword());
	func.setPerfilUsuario(dbUsr.getPerfilUsuario());
	
	this.funcionarioRepository.saveOrUpdate(func);
	result.include("mensagem", this.localization.getMessage("mensagem.crudFuncionarioAdicionadoAoFornec", func.getNome()));
	result.redirectTo(FornecedoresController.class).view(func.getFornecedor().getId());  			
}
Criado 21 de maio de 2013
Respostas 0
Participantes 1