| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2010 10:39:30
|
faelcavalcanti
GUJ Ranger
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 960
Localização: Recife-PE
Offline
|
Olá, estou tendo dificuldade em fazer o seguinte mapeamento, onde tenho uma tabela por subclasse, usando JPA 2. Segue classe abstrata(superclasse) abaixo:
e na subclasse:
no caso o atributo id é compartilhado entre as subclasses, e estas tem chave primárias diferentes, e consequente nome se sequences diferentes.
do jeito que está acima, ganho o seguinte erro:
org.springframework.dao.InvalidDataAccessResourceUsageException:
could not get next sequence value; SQL [select nextval ('hibernate_sequence')];
nested exception is org.hibernate.exception.SQLGrammarException: could not get next sequence value
alguém saberia como resolver mapeando a partir da subclasse?
This message was edited 1 time. Last update was at 11/05/2010 15:49:04
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2010 15:51:29
|
faelcavalcanti
GUJ Ranger
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 960
Localização: Recife-PE
Offline
|
tinha visto algumas abordagens que mapeia a superclasse com @MappedSuperclass, onde na classe FieldDefinition ao invés de usar @Entity, usar @MappedSuperclass, mas isso implicará no seguinte erro abaixo, pois eu tenho outra classe, que tem um relacionamento @OneToMany para FieldDefinition classe InfoRequest, que tem relacionamento OneToMany com FieldDefinition(abstrata) erro ao tentar modificar classe FieldDefinition, usando @MappedSuperclass, ao invés de @Entity resumindo, apenas estou realçando o porque não usei @MappedSuperclass para mapear a superclasse, FieldDefinition, apesar de este não ser o erro em específico, permanecendo o primeiro acima.
This message was edited 1 time. Last update was at 11/05/2010 17:56:15
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2010 16:00:59
|
oddy.silva
JavaEvangelist
![[Avatar]](/images/avatar/3647532ec07150bfa31ec2896932bdfb.jpg)
Membro desde: 24/11/2008 11:42:10
Mensagens: 352
Localização: Itu
Offline
|
Lá no seu Set<T>, você pode mapear com @CollectionOfElements.
Tenta aí
This message was edited 2 times. Last update was at 11/05/2010 16:05:39
|
Odair
Gestão em T.I
FATEC - ITU
"Quem quer fazer alguma coisa, encontra um meio"
Quer ser um programador veloz? Então compre um par de tênis a jato.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2010 16:05:28
|
pinheiro.cc
Entusiasta Java
Membro desde: 17/11/2008 10:30:43
Mensagens: 24
Localização: Jaboticabal / Ribeirão Preto
Offline
|
eu acredito que não exista a necessidade de mapear novamente isso
na classe IntegerField
-----
caso você esteja com problema com o atributo ID ser utilizado em várias tabelas, você pode utilizar um @TableGenerator que controla e distribui os ID para todas as tabelas que extendem essa classe.
você ja tentou isso?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2010 16:42:33
|
faelcavalcanti
GUJ Ranger
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 960
Localização: Recife-PE
Offline
|
oddy.silva wrote:Lá no seu Set<T>, você pode mapear com @CollectionOfElements.
Tenta aí
entendi, mas eu não poderia utilizar CollectionOfElements, porque a classe FieldDefinition é uma classe abstrata que não está mapeada para uma tabela.
pinheiro.cc wrote:eu acredito que não exista a necessidade de mapear novamente isso
na classe IntegerField
é vero, efeito copy-paste aqui no tópico. ignorem!
pinheiro.cc wrote:caso você esteja com problema com o atributo ID ser utilizado em várias tabelas, você pode utilizar um @TableGenerator que controla e distribui os ID para todas as tabelas que extendem essa classe. você ja tentou isso?
não tentei porque inicialmente não tinha achado que se aplicava ao meu caso por conta das sequences serem diferentes.
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2010 17:00:29
|
faelcavalcanti
GUJ Ranger
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 960
Localização: Recife-PE
Offline
|
para explicar melhor o caso tenho o seguinte cenário no modelo de classe e banco, respectivamente  obs: analisando a priori estes modelos individualmente, parece uma idéia inútil, mas removi bastantes informações afim de facilitar entendimento, como idéia básica para mapear estes relacionamentos.
This message was edited 2 times. Last update was at 11/05/2010 17:04:06
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2010 10:25:17
|
faelcavalcanti
GUJ Ranger
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 960
Localização: Recife-PE
Offline
|
fazendo uns testes a força bruta, resgistrando tentativa falha, ele gerou o seguinte jpql
Hibernate: insert into owners (logo_id, name) values (?, ?) Hibernate: select currval('owners_owner_id_seq') Hibernate: insert into info_requesters (final_date, owner_id) values (?, ?) Hibernate: select currval('info_requesters_info_request_id_seq') Hibernate: select nextval ('integer_fields_integer_field_id_seq') Hibernate: insert into integer_fields (label, required, info_request_id, integer_field_id) values (?, ?, ?, ?) Hibernate: update FieldDefinition set info_request_id=? where integer_field_id=?
reparem que na última linha ele gerou uma operação de update para classe abstrata onde não deveria, apesar de na linha anterior ter feito um insert na tabela correta mapeada a partir da subclasse. segue como ficou mapeamento para gerar comportamento acima: classe abstrata FieldDefinition ... Fiz propositalmente declaração dos campos na superclasse, pois não consegui rescrevê-los na subclasse demonstrado no 1º post deste tópico subclasse IntegerField classe InfoRequest que possui relacionamento OneToMany com classe abstrata FieldDefinition, do tipo Set<FieldDefinition> segue abaixo como ficou chamada para metodo de teste do log acima identificado na geração do hql erro ocorre após executar linha de método acima sync()
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 update FieldDefinition set info_request_id=107 where integer_field_id=1700 foi abortada. Chame getNextException para ver a causa. ERRO: relação "fielddefinition" não existe
obs: último acima informa uma coisa óbvia, faltando apenas fazer com que ele gere jpql para entidade certa.
This message was edited 2 times. Last update was at 12/05/2010 10:27:32
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2010 18:04:13
|
faelcavalcanti
GUJ Ranger
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 960
Localização: Recife-PE
Offline
|
uma pergunta vocês sabem como faço para sobrescrever mapeamento da chave primária a partir da subclasse. não é sobrescrever associação ou atributo, é o @Id da superclasse.
no caso tentei fazê-lo da seguinte forma:
super classe FieldDefinition
subclasse IntegerField
fazendo isto recebo a seguinte exceção
Caused by: java.lang.ClassCastException: org.hibernate.mapping.UnionSubclass cannot be cast to org.hibernate.mapping.RootClass
vi no forum do hibernate sobre onde uma alternativa seria, tipo colocando uma anotação no método get, mas não funfou/funcionou
This message was edited 1 time. Last update was at 13/05/2010 18:09:42
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
|
|