Persist associative table in manyTomany

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. This creates the Person_Time table, with the Person ID and Time ID.

My RegisterTime method should include in this PersonTime table the Person ID and Time 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;
    }
}

Time:

@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 + "]";
    }
}

Casso necessary, since it is making the DAO classes available to these two or the project in the complete GIT.

    
asked by anonymous 05.07.2016 / 17:21

1 answer

1

Assuming you have a person with id 1L and a Team with id 2L in the database and want to add a relationship between the two as a row in the Person_Time table. The code looks 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 to another's list hibernate automatically creates a row in the Person_Time table creating a relationship between the two.

    
22.07.2016 / 00:47