Antes de postar esta dúvida fiz uma pesquisa no fórum sobre este problema. Não há achei nenhuma solução esclarecedora.
A Classe abaixo OBRAS possui um relacionamento 1:N com as classes ObraAcessibilidade e ObraProfissionais.
Pelo que entendi é para tirar da anotação @OneToMany o ‘mappedBy’, fazendo com que ele deixe de ser considerado pelo hibernate como um ‘bag’ e incluir a anotação @IndexColumn(name=“nome_da_sua_coluna_ID”):
@OneToMany(cascade= CascadeType.ALL, fetch=FetchType.EAGER)
@IndexColumn(name="ID_OBRA") //<-- substitua pelo nome correto da coluna
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private List<ObraAcessibilidade> obraacessibilidades = new ArrayList<ObraAcessibilidade>();
Boa sorte!
W
wmaciel
Obrigado Jamir !
Neste link são apresentadas 3 soluções. Fiquei com uma 4 solução apresentada em um comentário sobre as técnicas.
Apenas para acrescentar, comigo estava acontecendo este mesmo erro. Resolvi apenas alterando o mapeamento de FetchType.EAGER para Lazy
D
duducordeiro_
Eu me equivoquei na resposta acima. Uma boa alternativa que eu encontrei foi alterar o List para Set e pronto, utilizando a estrutura do @OneToMany com mappedBy
Eu me equivoquei na resposta acima. Uma boa alternativa que eu encontrei foi alterar o List para Set e pronto, utilizando a estrutura do @OneToMany com mappedBy
Olá, aqui resolveu também, colocando Set no lugar de List.
Alguém sabe o porque disso? Obrigado
tenclar
aqui resolveu o problema do bags , mas com o set ele só lista 1 item devido a informação que vem do banco da classe pai repetir no caso vendas e item vendas onde em item vai repetir o codigo venda_id
illa_Silva_Barros
thiagocastanhari:
duducordeiro_:
Eu me equivoquei na resposta acima. Uma boa alternativa que eu encontrei foi alterar o List para Set e pronto, utilizando a estrutura do @OneToMany com mappedBy
Olá, aqui resolveu também, colocando Set no lugar de List.
Alguém sabe o porque disso? Obrigado
Olá, cheguei tarde mas talvez ajude alguém…
A especificação JPA não permite que em uma classe do tipo bean de entidade sejam utilizados dois relacionamentos com fetch igual a FetchType.EAGER, sendo esses do tipo das interfaces List e Collection. Assim, para contornar essa limitação definimos um dos relacionamentos como um objeto do tipo da interface Set.
Bons estudos!
A
apalmeira1 like
Resolvi adicionando @Fetch(FetchMode.SUBSELECT) abaixo do @OneToMany(fetch = FetchType.EAGER).
A
andersonjm
Putz cara !!! tu é um anjo??? kkkk . . .melhor solução pra mim aqui!! espero que seja a mais performatica tbem!
Se eu mudasse pra SET, teria que mudar o JSP e mais outras coisa, além que com SET ele tava duplicando registro… enfim, prun novato igual eu sua solução foi espetacular, caiu como uma luva…
valewWW!!!
abrç´s
Rodrigo_Sasaki
Putz cara !!! tu é um anjo??? kkkk . . .melhor solução pra mim aqui!! espero que seja a mais performatica tbem!
Se eu mudasse pra SET, teria que mudar o JSP e mais outras coisa, além que com SET ele tava duplicando registro… enfim, prun novato igual eu sua solução foi espetacular, caiu como uma luva…
valewWW!!!
abrç´s
Só lembre de deixar claro que você está respondendo a um tópico antigo.
E mais umas ressalvas:
Tome cuidado porque a anotação @Fetch é específica do Hibernate, se você precisar utilizar JPA puro, não poderá utilizar assim.
E eu garanto que o seu Set não está duplicando registros, o que pode acontecer é seu equals não estar corretamente sobrescrito
amattos
resolveu aqui pra mim também, ainda mantive o List<>.
rennanc
esse topico foi muito importante pra mim, testei todas as opções, mas a unica que funcionou comigo, foi usar o Set ao invés de collection.
maddogxx
Também resolvi desta forma.
H
Herquiloide_hele
Ola wmaciel, eu tambem tive praticamente o mesmo erro, mas resolvi colocando o fetch = FetchType.EAGER e tambem adicionando a anotacao @Fetch(value = FetchMode.SUBSELECT).