Criteria com propriedade @Embeddable

6 respostas
J

Olá pessoal,

Existe alguma maneira de utilizar Restrictions, para criar uma Criteria do hibernate, quando temos propriedades

em uma entidade definida como @Embeddable.

O problema é o seguinte:

Quando tento montar uma criteria e uns dos campos de restrição

tem uma propriedade Embeddable, semple dá uma ‘Not Found Properties’.

Trecho:

criteriaFiltroNotaLancamento.createAlias("itemCredito", "itemCredito");
criteriaFiltroNotaLancamento.add(Restrictions.between("itemCredito.valorAbsoluto", new BigDecimal("1"), new BigDecimal("2")));

Onde, valorAbsoluto tá em uma Classe marcada como @Embeddable que relaciona com ItemCredito.

Mais uma observação, valorAbsoluto tá na classe pai da classe definida com @Embeddable.

6 Respostas

C

Boa tarde

Poste a exception que esta dando para ter certeza do erro que esta acontecendo, mas pela descrição que você forneceu, o erro deve ser devido a herança entre o classe Embeddable e seu pai.

falou.

Marky.Vasconcelos

Ja criei um topico com exatamente a mesma duvida.

http://www.guj.com.br/posts/list/126597.java

Postei até na seção de bugs do hibernate e precisa ser solucionado.

J

Oi Mark_Ameba,

Já tinha visto esse seu antigo post. Na verdade, não posso alterar o

mapeamento, ou seja, não posso transformar @Embeddable em @OneToMany, @ManyToOne etc.

E, também, já testei não utilizando Alias. Não utilizando Alias o erro continua.

O que seria? :S Outra sugestão?

J

Olá Caio,

Segue o erro…

Exception in thread "main" org.hibernate.QueryException: could not resolve property: valorAbsoluto of: br.com.sistram.model.notalancamento.ItemCredito
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1379)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)

Também, acredito que possa ser algo relacionado com a herança, mas não sei bem o que. Já verifiquei algumas

Criterias usando campos Embeddable e funcionaram, sem herança.

O que poderia ser? Você tem algumas sugestão?

Desde de já agradeço,

Abdon

Da para fazer uma gambiarra que resolve este problema.

Basta na entidade que contem a associação com a composite-id vc declarar um metodo getEntidade() que retornaria um null mesmo, como o mesmo relacionamento que vc colocou na sua composite-id só que com insertable=false, updateable=false. Assim o hibernate vai gerar a consulta que vc precisa sem vc ter que desfazer a sua chave composta e não vai dar nenhum problema na hora de inserir\atualizar o registro.

É claro que isto não é uma boa solução mais funciona, a melhor solução seria alterar o mapeamento, mas vc diz não ser possivel então…

J

Oi Ovelha,

Obrigada pela a resposta, mas também não posso alterar a entidade.

O que acontece é que as entidades são geradas por outra equipe e

transformadas de certa forma em bibliotecas do nosso projeto. Eles

não aceitaram mudanças para atender essa consulta, nem mesmo

a mudança do relacionamento. :frowning:

Outra sugestão meninos?

Criado 1 de março de 2010
Ultima resposta 2 de mar. de 2010
Respostas 6
Participantes 4