JPA - Pks e Sequences

8 respostas
mRc

Fala galera,
Tenho o seguinte problema,
ja tenho pronto minhas Entity’s com suas pks com suas sequences (quando necessário).
Eu gostaria de forçar a insersão de um registro usando o EntityManager com uma pk de minha escolha (mesmo na Entity ter a pk com sequence) mas não consigo, ele insere a continuação da sequence, não o atributo da pk que eu setei na Entity…

Alguem sabe como eu insiro um registro a minha escolha em uma coluna com sequence?

8 Respostas

danieldestro

Usa o merge. Não dá?

mRc
O atributo da PK no Entity:
@Id
@SequenceGenerator(name="SqPkCurriculoMotivo",sequenceName="SQ_PK_CURRICULO_MOTIVO",allocationSize=1)
@GeneratedValue(generator="SqPkCurriculoMotivo",strategy=GenerationType.SEQUENCE) 
@Column(name = "ID_MOTIVO_CURRICULUM", nullable = false, length=3)
private Long idMotivoCurriculum;
Teste que eu fis para inserir o registro com o registro que eu quero...
public class TesteJPA {
	public static void main(String[] args) {

		Map<String,String> map = new HashMap<String,String>();
    	map.put("hibernate.default_schema","mydb");
		EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("helloworld",map);
		EntityManager manager = entityManagerFactory.createEntityManager();
		
		CurriculumVitaeMotivo motivo = new CurriculumVitaeMotivo();
		motivo.setIdMotivoCurriculum(new Long(42));
		motivo.setDescricaoMotivoCurriculum("lorem");
		manager.getTransaction().begin();
		manager.merge(motivo);
		manager.getTransaction().commit();
		manager.close();

	}
}
o que foi cadastrado no banco:
id_motivo_curriculum: 1	
descricao_motivo_curriculum: "lorem"

concluindo, mesmo com merge ele segue a sequence....
eu nao queria usar Jpaql =T

danieldestro

Porque você iria querer definir o ID de um novo CurriculumVitaeMotivo, se ele é gerado?

mRc

Nesse caso nao faz sentido, mas 2 tabelas, agências e bancos, com todas agencias e bancos de todo o brasil, eles ja estao com seus respectivos relacionamentos. e eu quero fazer a carga inicial dele usando minhas entitys.

Com sequence eu não ia ter certeza de ser mantido o relacionamento deles…

danieldestro

Carga de dados se faz via SQL ou outra ferramenta do BD.

mRc

eh, cansei de procurar uma forma de burlar a sequence, vo fazer via sql msm.
mas fica ai a curiozidade, se alguem conseguir fazer um merge sem usar a sequence por favor me fala!

valeu… :lol:

Kenobi

mRc:
Fala galera,
Tenho o seguinte problema,
ja tenho pronto minhas Entity’s com suas pks com suas sequences (quando necessário).
Eu gostaria de forçar a insersão de um registro usando o EntityManager com uma pk de minha escolha (mesmo na Entity ter a pk com sequence) mas não consigo, ele insere a continuação da sequence, não o atributo da pk que eu setei na Entity…

Alguem sabe como eu insiro um registro a minha escolha em uma coluna com sequence?

Não entendi o que vc quis dizer aqui nesse ponto. Pelo seu código, ele sempre vai chamar o gerador para a sequence, pois foi a estratégia que você definiu. Para persistir um Entity com sua PK, vc não pode ter gerador associado ao mesmo.

Como essa informação no metadado e vc está inserindo num Entity específico o que você poderia fazer é ter outro entity de persistência com outra estratégia apontando para a mesma estrutura de dados.

mRc

Eh… acho q isso resolve :smiley:

Valeu Kenobi!!!

Criado 18 de março de 2008
Ultima resposta 20 de mar. de 2008
Respostas 8
Participantes 3