handle inheritance in java?

0

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".

    
asked by 21.08.2017 в 21:06
source

0 answers