I have a small obstacle, I have a table that inherits others. The main table is Persona
and my Entities:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@NamedQueries(
{
@NamedQuery(name = "Persona.all", query = "select p from Persona p"),
@NamedQuery(name = "Persona.findDni", query = "select per from Persona per where per.dni=:dni"),
@NamedQuery(name = "Persona.findDni_And_Codigo", query = "Select per FROM Persona per WHERE per.codigo=:codigo and per.dni=:dni")
}
)
public abstract class Persona implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_persona")
protected int id_persona;
@Column(name = "nombre", insertable = true, nullable = false)
protected String nombre;
@Column(name = "apellido", insertable = true, nullable = false)
protected String apellido;
@Column(name = "dni", length = 8, nullable = false)
protected int dni;
@Column(name = "codigo", nullable = false)
protected String codigo;
@Column(name = "correo_electronico")
protected String correo_electronico;
@Column(name = "telefono")
protected String telefono;
@Column(name = "sesion", nullable = false)
protected boolean IsSesion = false;
public Persona() {
}
public Persona(String nombre, String apellido, int dni) {
this.nombre = nombre;
this.apellido = apellido;
this.dni = dni;
}
public void setIsSesion(boolean IsSesion) {
this.IsSesion = IsSesion;
}
public boolean getIsSesion() {
return this.IsSesion;
}
public int getId_persona() {
return id_persona;
}
public void setId_persona(int id_persona) {
this.id_persona = id_persona;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public int getDni() {
return dni;
}
public void setDni(int dni) {
this.dni = dni;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getCorreo_electronico() {
return correo_electronico;
}
public void setCorreo_electronico(String correo_electronico) {
this.correo_electronico = correo_electronico;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
@Override
public int hashCode() {
int hash = 3;
hash = 73 * hash + this.id_persona;
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Persona other = (Persona) obj;
if (this.id_persona != other.id_persona) {
return false;
}
return true;
}
@Override
public String toString() {
return "Persona [id_persona=" + id_persona + ", nombre=" + nombre + ", apellido=" + apellido + ", dni=" + dni
+ ", codigo=" + codigo + ", correo_electronico=" + correo_electronico
+ ", telefono=" + telefono + "]";
}
}
The previous class is the main one that the others will inherit, as follows:
@Entity
@Table(name = "usuario_externo")
@PrimaryKeyJoinColumn(name = "id_persona")
@Inheritance(strategy = InheritanceType.JOINED)
@NamedQueries({
@NamedQuery(name = "UsuarioExterno.documentos.findDni", query = "Select UE from UsuarioExterno UE where UE.dni=:dni"),
@NamedQuery(name = "UsuarioExterno.all", query = "Select UE from UsuarioExterno UE"),
@NamedQuery(name = "UsuarioExterno.find_by_dni", query = "SELECT a FROM UsuarioExterno a where a.dni=:dni")
})
public class UsuarioExterno extends Persona implements Serializable {
private static final long serialVersionUID = 1L;
@OneToMany(mappedBy = "usuario", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH}, orphanRemoval = true)
private List<Documento> documentos = new ArrayList<>();
public UsuarioExterno() {
}
public UsuarioExterno(String nombre, String apellido, int dni, String Correo, String telefono) {
super(nombre, apellido, dni);
this.correo_electronico = Correo;
this.telefono = telefono;
}
public void addDocumento(Documento doc) {
System.out.println("entro a guardar el documento");
this.documentos.add(doc);
doc.setUsuario(this);
}
public List<Documento> getDocumentos() {
return documentos;
}
public void setDocumentos(List<Documento> documentos) {
this.documentos = documentos;
}
}
Y:
@Entity
@NamedQueries({
@NamedQuery(name = "Usuario_interno.all", query = "Select a from Usuario_interno a"),
@NamedQuery(name = "Usuario_interno.find.Perfil", query = "Select a from Usuario_interno a WHERE a.perfil.tipoPerfil=:perfil"),
@NamedQuery(name = "Usuario_interno.find.Area", query = "SELECT a from Usuario_interno a where a.area.tipoArea=:area"),
@NamedQuery(name = "Usuario_interni.findb_by_dni", query = "SELECT a from Usuario_interno a where a.dni=:dni")})
public class Usuario_interno extends Persona implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "perfil_id_perfil", nullable = false)
private Perfil perfil;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "area_id_area", nullable = false)
private Area area;
//@ManyToMany(targetEntity=Documento.class)
/*@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.DETACH,CascadeType.REMOVE})
@JoinTable(name="operacion_documento",
joinColumns={@JoinColumn(name="usuario")},
inverseJoinColumns={@JoinColumn(name="documento")})
private List<Documento> documentos=new ArrayList<>();*/
@OneToMany(mappedBy = "usuario", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REMOVE}, orphanRemoval = true)
private List<OperacionDocumento> operacionUsuarioInterno = new ArrayList<>();
public Usuario_interno() {
}
public void AddOperacionDocumento(OperacionDocumento opera) {
if (this.operacionUsuarioInterno.isEmpty() || !this.operacionUsuarioInterno.contains(opera)) {
this.operacionUsuarioInterno.add(opera);
opera.setUsuario(this);
}
}
public Perfil getPerfil() {
return perfil;
}
public void setPerfil(Perfil perfil) {
this.perfil = perfil;
}
public Area getArea() {
return area;
}
public void setArea(Area area) {
this.area = area;
}
public List<OperacionDocumento> getOperacionUsuarioInterno() {
this.operacionUsuarioInterno.size();
return operacionUsuarioInterno;
}
public void setOperacionUsuarioInterno(List<OperacionDocumento> operacionUsuarioInterno) {
this.operacionUsuarioInterno = operacionUsuarioInterno;
}
@Override
public String getCodigo() {
return super.getCodigo(); //To change body of generated methods, choose Tools | Templates.
}
@Override
public String getApellido() {
return super.getApellido(); //To change body of generated methods, choose Tools | Templates.
}
public Usuario_interno(String nombre, String apellido, int dni) {
super(nombre, apellido, dni);
}
}
I have to make a "login" for the previous classes, which I have to direct them in different views, my first solution is to look in the Entity Person and from there I can know if that person is registered, the problem goes when I try to direct to your correct view how to know if it is an "Internal User" or "External User".