Pessoal, teoricamente quando se usa JPA, a aplicação deveria se comportar da mesma forma usando TopLink, Hibernate ou qualquer outro provider certo ??
o que está acontecendo é que tenho uma rotina de importação de dados de um arquivo txt.
estava usando c/ toplink e quando eu fazia um EntityManager.merge(objeto), com o objeto tendo um relacionamento ManyToOne, ele fazia o seguinte:
se existisse o objeto do relacionamento, alterava se tivesse campos diferentes.
se não exstisse, incluia.
aí fui mudar pro hibernate pra ver se mudaria algo no desempenho…
me deparei com um erro pq não faz essa validação do relacionamento.
não era pra funcionar da mesma forma, independente do provider ???
na teoria sim… Eu tb ja tive problemas com o toplink como provider… mas e ae que erro vc teve?
RaulCarlin
Será que não é o Cascade que deve ser explícito? Uma idéia só do que pode ser, pois só usei Hibernate até hoje…
Tem coisas que às vezes devem seguir certas conventions pra que funcione com qualquer implementação…
V
victorpriest
Então, como vi (pelo log) que quando usava o merge, sempre fazia uma verificação antes, eu apenas populava os objetos conforme vinha do arquivo texto e deixava o entityManager se virar…
quando mudei pra hibernate e não faz mais essa validação, ocorre erro porque ele tenta incluir num relacionamento um objeto que não existe.
vou colocar um exemplo:
Entidade:publicclassPlano{@IdprivateIntegerid;privateStringnome;@ManyToOne@JoinColumn(name="codacomodacao",referencedColumnName="codacomodacao",nullable=false)privateAcomodacaoacomodacao;Rotina:plano=newPlano();plano.setCodplano(1);plano.setNome("Nome do plano");plano.setAcomodacao(newAcomodacao());plano.getAcomodacao().setCodacomodacao(1);plano.getAcomodacao().setNome("Nome da Acomodação");DAO.salvar(plano);DAO:publicvoidsalvar(Objectobjeto){getEntityManager().merge(objeto);}
supondo que o banco de dados está vazio.
Com o TopLink:
Insere acomodação
Insere plano
Com o Hibernate:
Insere plano, mas dá erro por não existir a acomodação.
T
Tecnoage
vc tem uma referência de acomodação para plano?
V
victorpriest
Não, é unilateral
V
victorpriest
Consegui… é por causa de cascades mesmo…
pelo visto, pra aplicação se comportar da mesma forma, independente de hibernate ou toplink, é necessário muito coisa além de simplesmente usar JPA