Ir para o conteúdo
JSouza69

Relação entre três tabelas com hibernate e Spring Transactional

Mensagens Recomendadas

JSouza69

Primeiro quero agradecer ao pessoal que com muita paciência ajudas os mais carenciados.

Dito isso passo ao meu problema.

Quero fazer uma BD com três tabelas:

  • Estudante - cada estudante pode ter um só telemóvel
  • Telemóvel - um telemóvel pode ter só um estudante mas pode ter duas operadora(dois cartões)
  • Operadora - pode ter vários telemóveis.

Sendo a relação entre elas é:

  • Estudante <-> Telemovel - OneToOne Bidirecional.
  • Telemóvel <-> Operadora - manyToMany Bidirecional.

O que complica, e que não consegui arranjar ajuda é o seguinte:

Eu quero gravar na BD primeiro as operadoras e depois quando gravar o estudante atualizar a operadora com a informação do telemóvel.

Estou utilizando o hibernate e o Spring Transactional

Agradeço qualquer tipo de ajuda.

package com.jairson.hibernate.model;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "Telemovel")
public class Telemovel {
@Id
@Column(name="TELEMOVEL_ID")
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="student"))
private long id;

@Column(name = "MODELO")
private String modelo;

@OneToOne
@PrimaryKeyJoinColumn
private Student student;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "TELEMOVEL_OPERADORA",
joinColumns = { @JoinColumn(name = "TELEMOVEL_ID") },
inverseJoinColumns = { @JoinColumn(name = "OPERADORA_ID") })
private List<Operadora> operadoras = new ArrayList<Operadora>();
public Telemovel() {
}
public Telemovel(String modelo) {
this.modelo = modelo;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}

public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public List<Operadora> getOperadoras() {
return operadoras;
}
public void setOperadoras(List<Operadora> operadoras) {
this.operadoras = operadoras;
}
@Override
public String toString() {
return "Telemovel{" +
"modelo='" + modelo + '\'' +
", student=" + student +
'}';
}
}
 
package com.jairson.hibernate.model;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "OPERADORA")
public class Operadora {
 @Id
 @GeneratedValue
 @Column(name = "OPERADORA_ID")
 private long id;
 @Column(name = "NAME")
 private String name;

 @ManyToMany(mappedBy="operadoras")
 private List<Telemovel> telemovels = new ArrayList<Telemovel>();
 public Operadora(){
 }
 public Operadora(String name){
	 this.name = name;
 }
 public long getId() {
	 return id;
 }
 public void setId(long id) {
	 this.id = id;
 }
 public String getName() {
	 return name;
 }
 public void setName(String name) {
	 this.name = name;
 }

 public List<Telemovel> getTelemovels() {
	 return telemovels;
 }
 public void setTelemovels(List<Telemovel> telemovels) {
	 this.telemovels = telemovels;
 }
 @Override
 public int hashCode() {
	 final int prime = 31;
	 int result = 1;
	 result = prime * result + (int) (id ^ (id >>> 32));
	 result = prime * result + ((name == null) ? 0 : name.hashCode());
	 return result;
 }
 @Override
 public boolean equals(Object obj) {
	 if (this == obj)
		 return true;
	 if (obj == null)
		 return false;
	 if (!(obj instanceof Operadora))
		 return false;
	 Operadora other = (Operadora) obj;
	 if (id != other.id)
		 return false;
	 if (name == null) {
		 if (other.name != null)
			 return false;
	 } else if (!name.equals(other.name))
		 return false;
	 return true;
 }
 @Override
 public String toString() {
	 return "Operadora{" +
			 "id=" + id +
			 ", name='" + name + '\'' +
			 ", telemovels=" + telemovels +
			 '}';
 }
}
 
package com.jairson.hibernate.model;

import javax.persistence.*;
@Entity
@Table(name = "STUDENT")
public class Student {
@Id
@GeneratedValue
@Column(name = "STUDENT_ID")
private long id;
@Column(name = "FIRST_NAME")
private String firstName;

@OneToOne(mappedBy="student", cascade = CascadeType.ALL)
private Telemovel telemovel;
public Student() {
}
public Student(String firstName) {
 this.firstName = firstName;
}
public long getId() {
 return id;
}
public void setId(long id) {
 this.id = id;
}
public String getFirstName() {
 return firstName;
}
public void setFirstName(String firstName) {
 this.firstName = firstName;
}

public Telemovel getTelemovel() {
 return telemovel;
}
public void setTelemovel(Telemovel telemovel) {
 this.telemovel = telemovel;
}
@Override
public String toString() {
 return "Student{" +
		 "firstName='" + firstName + '\'' +
//			 ", telemovel=" + telemovel +
		 '}';
}
}
 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.