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!
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
@OneToMany(mappedBy="obra", cascade= CascadeType.ALL)
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<ObraProfissionais> obraprofissionais = new HashSet<ObraProfissionais>();
[quote=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
@OneToMany(mappedBy="obra", cascade= CascadeType.ALL)
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<ObraProfissionais> obraprofissionais = new HashSet<ObraProfissionais>();
[/quote]
Olá, aqui resolveu também, colocando Set no lugar de List.
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
[quote=thiagocastanhari][quote=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
@OneToMany(mappedBy="obra", cascade= CascadeType.ALL)
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<ObraProfissionais> obraprofissionais = new HashSet<ObraProfissionais>();
[/quote]
Olá, aqui resolveu também, colocando Set no lugar de List.
Alguém sabe o porque disso? Obrigado[/quote]
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.
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…
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[/quote]
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
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).