Persist associative table in manyTomany

Asked

Viewed 561 times

1

I have the following problem: How will I persist in an associative table that has no class ?

I have two classes: Person and Time, where I want to make the relationship between people and teams. In this is created the Personal Time table, with the Person ID and Time ID.

My method Personal registration should include in this table the person ID and the Team ID.

Person:

@Entity
public class Pessoa implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column (name="id_Pessoa")
    private Integer id;

    @Column()
    private String nomeUsuario;

    @Column()
    private String senhaUsuario;

    @Column()
    private String nomeCompleto;

    @Column()
    private String email;

    @Column()
    private Integer idade;

    @ManyToMany
     @JoinTable(name="Pessoa_Time",joinColumns={@JoinColumn(name="id_pessoa")}, 
     inverseJoinColumns={@JoinColumn(name="id_time")})
    private List<Time> listaTimes; 

    public Pessoa (){}

    public Pessoa (Pessoa pessoa){
        this.id = pessoa.getId();
        this.nomeUsuario = pessoa.getNomeUsuario();
        this.senhaUsuario = pessoa.getSenhaUsuario();
        this.nomeCompleto = pessoa.getNomeCompleto();
        this.email = pessoa.getEmail();
        this.idade = pessoa.getIdade();
    }



    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNomeUsuario() {
        return nomeUsuario;
    }

    public void setNomeUsuario(String nomeUsuario) {
        this.nomeUsuario = nomeUsuario;
    }

    public String getNomeCompleto() {
        return nomeCompleto;
    }

    public void setNomeCompleto(String nomeCompleto) {
        this.nomeCompleto = nomeCompleto;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getIdade() {
        return idade;
    }

    public void setIdade(Integer idade) {
        this.idade = idade;
    }


    public String getSenhaUsuario() {
        return senhaUsuario;
    }

    public void setSenhaUsuario(String senhaUsuario) {
        this.senhaUsuario = senhaUsuario;
    }

    public List<Time> getListaTimes() {
        return listaTimes;
    }

    public void setListaTimes(List<Time> listaTimes) {
        this.listaTimes = listaTimes;
    }
}

Team:

@Entity
public class Time implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column (name="id_Time")
    private int id;

    @Column(nullable=false)
    private String nome;

    @Column(nullable=false)
    private String senhaTime;

    @ManyToMany(mappedBy="listaTimes")
    private List<Pessoa> listaPessoas;

    @ManyToMany(mappedBy="listaTimes")
    private List<Campeonato> listaCampeonatos;

    public Time(){}

    public Time(Time time){
        this.id = time.getId();
        this.nome = time.getNome();
        this.senhaTime = time.getSenhaTime();
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }


    public List<Pessoa> getListaPessoas() {
        return listaPessoas;
    }

    public void setListaPessoas(List<Pessoa> listaPessoas) {
        this.listaPessoas = listaPessoas;
    }

    public String getSenhaTime() {
        return senhaTime;
    }

    public void setSenhaTime(String senhaTime) {
        this.senhaTime = senhaTime;
    }



    public List<Campeonato> getListaCampeonatos() {
        return listaCampeonatos;
    }

    public void setListaCampeonatos(List<Campeonato> listaCampeonatos) {
        this.listaCampeonatos = listaCampeonatos;
    }

    @Override
    public String toString() {
        return "Time [id=" + id + ", nome=" + nome + ", senhaTime=" + senhaTime + ", listaPessoas=" + listaPessoas
                + ", listaCampeonatos=" + listaCampeonatos + "]";
    }
}

Necessary because it is providing the DAO classes of these two or the project in the complete GIT.

1 answer

1


Suppose you have a person with id 1L and a Time with id 2L in the database and want to add a relation between the two as a row in the Personal Time table. The code would look like this:

entityManager.getTransaction().begin();
Pessoa pessoa = entityMangager.find(Pessoa.class, 1L);
Time time = entityMangager.find(Time.class, 2L);
pessoa.getListaTimes().add(time);
time.getListaPessoas().add(pessoa);
entityMangager.getTransaction().commit()

That is, when you add an object in the list of the other Hibernate automatically creates a row in the table Pesoa_time creating a relationship between the two.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.