Skip to content

Instantly share code, notes, and snippets.

@christianroman
Created April 23, 2012 05:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save christianroman/2469015 to your computer and use it in GitHub Desktop.
Save christianroman/2469015 to your computer and use it in GitHub Desktop.
Hibernate Many-To-Many with Extra Columns
package org.cobaem.domain;
import java.io.Serializable;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
@Entity
@Table(name = "alumno")
@PrimaryKeyJoinColumn(name = "id_usuario")
public class Alumno extends Usuario implements Serializable,
JsonSerializer<Alumno> {
private static final long serialVersionUID = -902103389504570021L;
@Column(name = "nombre")
private String nombre;
@Column(name = "apaterno")
private String aPaterno;
@Column(name = "amaterno")
private String aMaterno;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "id_direccion")
private Direccion direccion;
@Column(name = "sexo", columnDefinition = "char(1)")
private String sexo;
@Column(name = "fecha_nacimiento")
private Date fechaNacimiento;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_escuela_proc")
private EscuelaProcedencia escuelaProcedencia;
@Column(name = "promedio_esc_proc")
private BigDecimal promedioEP;
@Column(name = "no_certificado_esc_proc")
private String certificadoEP;
@Column(name = "acta_nacimiento")
private String actaNacimiento;
@Column(name = "curp")
private String curp;
@Column(name = "rfc")
private String rfc;
@Column(name = "tutor")
private String tutor;
@Column(name = "email")
private String email;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "fecha_agregado")
private transient Date fechaAgregado;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "ultima_modificacion")
private transient Date ultimaModificacion;
@Column(name = "ip_modificacion")
private transient String ipModificacion;
@Column(name = "status", columnDefinition = "TINYINT", nullable = false)
private transient Integer status;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "alumno_grupo", joinColumns = { @JoinColumn(name = "id_usuario") }, inverseJoinColumns = { @JoinColumn(name = "id_grupo") })
private Set<Grupo> grupos = new HashSet<Grupo>();
/*
* @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.alumno", cascade = {
* CascadeType.PERSIST, CascadeType.MERGE })
*
* @Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE,
* org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
*/
// @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.alumno",
// cascade=CascadeType.ALL)
// private Set<Calificacion> calificaciones = new HashSet<Calificacion>();
@OneToMany(mappedBy = "alumno")
private Set<Calificacion> calificaciones = new HashSet<Calificacion>();
public Set<Grupo> getGrupos() {
return grupos;
}
public Alumno() {
super(null, null, null);
status = 1;
}
public Alumno(String clave, String nombre, String aPaterno,
String aMaterno, Direccion direccion, String sexo,
Date fechaNacimiento, EscuelaProcedencia escuelaProcedencia,
BigDecimal promedioEP, String certificadoEP, String actaNacimiento,
String curp, String rfc, String tutor, String email,
String contraseña, TipoUsuario tipoUsuario) {
super(clave, contraseña, tipoUsuario);
this.nombre = nombre;
this.aPaterno = aPaterno;
this.aMaterno = aMaterno;
this.direccion = direccion;
this.sexo = sexo;
this.fechaNacimiento = fechaNacimiento;
this.escuelaProcedencia = escuelaProcedencia;
this.promedioEP = promedioEP;
this.certificadoEP = certificadoEP;
this.actaNacimiento = actaNacimiento;
this.curp = curp;
this.rfc = rfc;
this.tutor = tutor;
this.email = email;
status = 1;
}
public void setGrupos(Set<Grupo> grupos) {
this.grupos = grupos;
}
public void addGrupo(Grupo grupo) {
if (grupos == null) {
grupos = new HashSet<Grupo>();
}
grupos.add(grupo);
}
public Set<Calificacion> getCalificaciones() {
return calificaciones;
}
public void setCalificaciones(Set<Calificacion> calificaciones) {
this.calificaciones = calificaciones;
}
public void addCalificacion(Calificacion calificacion) {
if (calificaciones == null) {
calificaciones = new HashSet<Calificacion>();
}
calificaciones.add(calificacion);
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getaPaterno() {
return aPaterno;
}
public void setaPaterno(String aPaterno) {
this.aPaterno = aPaterno;
}
public String getaMaterno() {
return aMaterno;
}
public void setaMaterno(String aMaterno) {
this.aMaterno = aMaterno;
}
public Direccion getDireccion() {
return direccion;
}
public void setDireccion(Direccion direccion) {
this.direccion = direccion;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public EscuelaProcedencia getEscuelaProcedencia() {
return escuelaProcedencia;
}
public void setEscuelaProcedencia(EscuelaProcedencia escuelaProcedencia) {
this.escuelaProcedencia = escuelaProcedencia;
}
public BigDecimal getPromedioEP() {
return promedioEP;
}
public void setPromedioEP(BigDecimal promedioEP) {
this.promedioEP = promedioEP;
}
public String getCertificadoEP() {
return certificadoEP;
}
public void setCertificadoEP(String certificadoEP) {
this.certificadoEP = certificadoEP;
}
public String getActaNacimiento() {
return actaNacimiento;
}
public void setActaNacimiento(String actaNacimiento) {
this.actaNacimiento = actaNacimiento;
}
public String getCurp() {
return curp;
}
public void setCurp(String curp) {
this.curp = curp;
}
public String getRfc() {
return rfc;
}
public void setRfc(String rfc) {
this.rfc = rfc;
}
public String getTutor() {
return tutor;
}
public void setTutor(String tutor) {
this.tutor = tutor;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getIpModificacion() {
return ipModificacion;
}
public void setIpModificacion(String ipModificacion) {
this.ipModificacion = ipModificacion;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Date getFechaNacimiento() {
return fechaNacimiento;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
public Date getfechaAgregado() {
return fechaAgregado;
}
public Date getUltimaModificacion() {
return ultimaModificacion;
}
public Date getFechaAgregado() {
return fechaAgregado;
}
public void setFechaAgregado(Date fechaAgregado) {
this.fechaAgregado = fechaAgregado;
}
public void setUltimaModificacion(Date ultimaModificacion) {
this.ultimaModificacion = ultimaModificacion;
}
public JsonElement serialize(Alumno src, Type typeOfSrc,
JsonSerializationContext context) {
JsonObject obj = new JsonObject();
obj.addProperty("name", src.nombre);
obj.addProperty("school", src.aPaterno);
return obj;
}
}
package org.cobaem.domain;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.FilterDef;
/**
* @author Christian Roman
*/
@Entity
@FilterDef(name="filterStatus", defaultCondition = "status IN (1,2)")
@Table(name = "asignacion")
public class Asignacion implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id_asignacion", unique = true, nullable = false)
@GeneratedValue
private Integer idAsignacion;
@ManyToOne
@JoinColumn(name = "id_usuario")
private Profesor profesor;
@ManyToOne
@JoinColumn(name = "id_grupo")
private Grupo grupo;
@ManyToOne
@JoinColumn(name = "id_materia")
private Materia materia;
@Column(name = "status", columnDefinition = "TINYINT", nullable = false)
private Integer status;
@OneToMany(mappedBy = "asignacion")
private Set<Calificacion> calificaciones = new HashSet<Calificacion>(0);
public void addCalificacion(Calificacion calificacion) {
if (calificaciones == null) {
calificaciones = new HashSet<Calificacion>();
}
calificaciones.add(calificacion);
}
public Set<Calificacion> getCalificaciones() {
return calificaciones;
}
public void setCalificaciones(Set<Calificacion> calificaciones) {
this.calificaciones = calificaciones;
}
public Asignacion() {
}
public Asignacion(Profesor profesor, Grupo grupo, Materia materia) {
this.profesor = profesor;
this.grupo = grupo;
this.materia = materia;
status = 1;
}
public Integer getIdAsignacion() {
return idAsignacion;
}
public void setIdAsignacion(Integer idAsignacion) {
this.idAsignacion = idAsignacion;
}
public Profesor getProfesor() {
return profesor;
}
public void setProfesor(Profesor profesor) {
this.profesor = profesor;
}
public Grupo getGrupo() {
return grupo;
}
public void setGrupo(Grupo grupo) {
this.grupo = grupo;
}
public Materia getMateria() {
return materia;
}
public void setMateria(Materia materia) {
this.materia = materia;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
package org.cobaem.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
/**
* @author Christian Roman
*/
@Entity
@Table(name = "calificacion")
public class Calificacion implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id_calificacion", unique = true, nullable = false)
@GeneratedValue
private Integer idCalificacion;
@Column(name = "primer_parcial", columnDefinition = "Decimal(3,1)")
private Double primerP;
@Column(name = "segundo_parcial", columnDefinition = "Decimal(3,1)")
private Double segundoP;
@Column(name = "tercer_parcial", columnDefinition = "Decimal(3,1)")
private Double tercerP;
@ManyToOne
@JoinColumn(name = "id_usuario")
private Alumno alumno;
@ManyToOne
@JoinColumn(name = "id_asignacion")
private Asignacion asignacion;
public Calificacion() {
}
public Calificacion(Double primerP, Double segundoP, Double tercerP,
Alumno alumno, Asignacion asignacion) {
this.primerP = primerP;
this.segundoP = segundoP;
this.tercerP = tercerP;
this.alumno = alumno;
this.asignacion = asignacion;
}
public Integer getIdCalificacion() {
return idCalificacion;
}
public void setIdCalificacion(Integer idCalificacion) {
this.idCalificacion = idCalificacion;
}
public Double getPrimerP() {
return primerP;
}
public void setPrimerP(Double primerP) {
this.primerP = primerP;
}
public Double getSegundoP() {
return segundoP;
}
public void setSegundoP(Double segundoP) {
this.segundoP = segundoP;
}
public Double getTercerP() {
return tercerP;
}
public void setTercerP(Double tercerP) {
this.tercerP = tercerP;
}
public Alumno getAlumno() {
return alumno;
}
public void setAlumno(Alumno alumno) {
this.alumno = alumno;
}
public Asignacion getAsignacion() {
return asignacion;
}
public void setAsignacion(Asignacion asignacion) {
this.asignacion = asignacion;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment