1
resposta

Mapear composição entre uma entidade com duas ou mais entidades

Olá Tenho necessidade de relacionar uma entidade com mais de uma entidade. Não posso mudar a estratégia de herança.

Pois bem, existem vários tipos de processos, como criminais, civis etc. Cada tipo de processo possui uma lista de leis, mas não consigo mapear o relacionamento entre ProcessoCriminal-Lei ao mesmo tempo que ProcessoCivil-Lei.

Lei não pode ser Embeddable (portanto, não posso usar @ElementCollection e @CollectionTable) pois possui uma lista de artigos (classe que não coloquei código abaixo). Deixando Lei como Embeddable não consigo mapear a lista de artigos.

Alguém tem alguma sugestão de como mapear esses relacionamentos sem precisar deixar a lista de Lei como transient nas "classes processos"?

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class ProcessoCivil {
    @Id
    @Column(name = "COD_PROCESSO")
    private Integer codigo;    

    @OneToMany(targetEntity = Lei.class)
    @JoinColumn(name = "COD_PROCESSO")    
    private List<Lei> leis;

// Outros códigos

}    

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class ProcessoCriminal {
    @Id
    @Column(name = "COD_PROCESSO")
    private Integer codigo;    

    @OneToMany(targetEntity = Lei.class)
    @JoinColumn(name = "COD_PROCESSO")    
    private List<Lei> leis;

// Outros códigos

}    

@Entity
public class Lei {
    @Id
    @Column(name = "COD_LEI")
    private Integer codigo;    

// Outros códigos

}
1 resposta

Olá Cândido, tudo bem? Peço desculpas pelo demora no retorno! Penso que a melhor alternativa nesse caso seria usando a anotação @ManyToMany, porque dessa forma você terá sempre uma tabela associativa no banco de dados que vai fazer esse relacionamento e assim você deve conseguir relacionar uma entendida com várias outras entidades.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software