Olá pessoal,
Estou com dificuldade para usar o relacionamento OneToMany / ManyToOne no Hibernate. Usando o exemplo abaixo, eu consigo retornar as permissões de uma tela dentro da classe Tela, porém, não sei como fazer a persistência utilizando a Collection permissão dentro da classe Tela.
Hoje eu utilizo somente para exibir os dados, para fazer a persistência eu utilizo o Bean da classe Permissao e não o Bean da classe Tela como eu acredito ser o correto.
Para persistir as permissões usando a classe Tela, creio que você vai precisar alterar o cascade (por exemplo, pode experimentar cascade=CascadeType.ALL em vez de cascade=CascadeType.REFRESH), e também vai ser necessário manipular a coleção enquanto o EntityManager estiver aberto. Se a manipulação da coleção for feita após o fechamento do EntityManager, o JPA não terá como repassar ao Banco de Dados as eventuais alterações.
A
apalmeira
Obrigado roger_rf!
Estou iniciando em java e hibernate. Você tem um exemplo de como fazer isso?
Desde já agradeço!
R
roger_rf
A melhor forma para entender como o Hibernate funciona é através do guia de referência:
O guia é todo feito em cima de mapeamentos XML, então você terá de cruzar as informações com as anotações JPA para alcançar os resultados desejados.
A
apalmeira
Como vocês fazem quando tem essa situação?
Vocês usam as coleções ou outro bean?
R
roger_rf
Normalmente eu uso coleções através de Set’s. Prós:
Podem ser usados em quase todos os relacionamentos de coleções encontrados em bases relacionais.
Contras:
Elementos de Set’s não são acessíveis por índices numéricos, ao contrário do que ocorre com List’s;
Se você não forçar ordenação (order-by em XML, @OrderBy com anotações) o Hibernate vai criar HashSet’s, que NÃO possuem ordem fixa. Ao forçar ordenação o Hibernate cria LinkedHashSet’s, que possuem ordem fixa e com os quais prefiro trabalhar;
Set’s não admitem registros duplicados, ao contrário do que ocorre com List’s. Assim, é preciso implementar cuidadosamente equals() e hashCode() em seus objetos de negócio, tanto para evitar duplicações indevidas quanto para garantir que os Set’s não recusem elementos válidos.
Também pode ser interessante usar List’s. Prós:
Elementos de List’s são acessíveis por índices numéricos.
Contras:
Ao usar List’s, se a tabela no Banco de Dados não prover uma coluna que funcione como índice, você força o Hibernate a usar a semântica de “bag”, o que às vezes não é desejável.
Há uma excelente discussão sobre isso no link a seguir: