Many-To-Many com mais colunas na RL (Resolvido)

4 respostas
andersonlandim

Olá a todos;

Imaginem que eu tenho a seguinte situação:

Código Employer

@Entity
public class Employer implements Serializable {
    @ManyToMany(
        targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
        cascade={CascadeType.PERSIST, CascadeType.MERGE}
    )
    @JoinTable(
        name="EMPLOYER_EMPLOYEE",
        joinColumns=@JoinColumn(name="EMPER_ID"),
        inverseJoinColumns=@JoinColumn(name="EMPEE_ID")
    )
    public Collection getEmployees() {
        return employees;
    }
    ...
}

Código Employee

@Entity
public class Employee implements Serializable {
    @ManyToMany(
        cascade = {CascadeType.PERSIST, CascadeType.MERGE},
        mappedBy = "employees",
        targetEntity = Employer.class
    )
    public Collection getEmployers() {
        return employers;
    }
}

Até ai tudo bem certo? Um many-to-many tranquilo;

Contudo, imaginem que na RL,EMPLOYER_EMPLOYEE ou tabela de relacionamento, eu tenha um campo a mais. Um ID de outra tabela criado pelo profissional do DB para melhorar as buscas do sistema;

Então eu teria um many-to-many, ainda gostaria de tê-lo :frowning: , e um id para ser inserido no meio da brincadeira toda. PS este id está contido na segunda tabela Employee ; e será incluido na RL também… Coisas de DB, lá vai ter uma trigger também que vai validar a inclusão do id se é igual e talss…

Me respondam: Será necessário criar uma classe a mais? Um Embedded? OU teria como eu criar uma lógica inteligente o suficiente para salvar no many-to-many e ainda informar o outro id que está contido na segunda tabela?

Se não fui muito claro, fiquem a vontade de criticar minha dúvida… hehe

vlw

4 Respostas

Priuli

Quando passei por isto eu criei uma classe a mais sendo que esta classe tem dois OneToMay para fazer o papel do ManyToMany

andersonlandim

E ai cara blz… Fiz da forma que vc falou e rolou sim vlw;

Mas agora, em outro relacionamento, many-to-many eu consegui a famigerada LazyInitializationException :frowning:

To na luta na net em busca de uma solução entre filtros transactions… Ate agora nada!

O meu codigo é simples:

Eu tenho uma classe recuperada de Usuario. e nela eu faço um getGrupo() que é many-to-many… e então! LazyInitializationException

ai ai… to vendo que tem a ver com a sessao do hibernate. E eu estou usando o Spring; Se alguém puder me dar uma luz… To aceitando;

Open Session In View? Não consegui fazer rolar

Priuli

O Spring tem uma classe de OpenSessionInView (se ñ me engano o nome da classe é este tb), que você utiliza sem ter que criar uma nova implementação deste padrão, eu utilizo no Jsf + Hibernate e tem esta classe já pronta na distribuição do Spring, ele é um Filter se ñ me engano.
Este padrão é simples, simplemeste é deixar a sessão do hibernate aberta durante a rederização e só será fechada depois da ultima utilização no final, quando o request está sendo respondido.
De uma estudada pois é bem importante, google: OpenSessionInView + Spring.

andersonlandim

Priuli:
O Spring tem uma classe de OpenSessionInView (se ñ me engano o nome da classe é este tb), que você utiliza sem ter que criar uma nova implementação deste padrão, eu utilizo no Jsf + Hibernate e tem esta classe já pronta na distribuição do Spring, ele é um Filter se ñ me engano.
Este padrão é simples, simplemeste é deixar a sessão do hibernate aberta durante a rederização e só será fechada depois da ultima utilização no final, quando o request está sendo respondido.
De uma estudada pois é bem importante, google: OpenSessionInView + Spring.

Cara!! Acabei de fazer funcionar! vlw pela ajuda. Tá tudo funcionando !!!

Criado 1 de fevereiro de 2011
Ultima resposta 3 de fev. de 2011
Respostas 4
Participantes 2