Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

JSouza69

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

Mensagens Recomendadas

JSouza69    0
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.