gujoheco gujoheco - 1 month ago 11
Java Question

Columns are not populating in tableview on javafx

I have been trying to make the columns show a string of paciente and empleado but still they show empty, the other columns are fine, they show what they supposed to show, but these 2 (paciente and empleado) are still empty. I thought it was because of their properties, that they have different names, i tried that and still they came up empty, can i have some tips on how to do it the right way?

columnaCitasFecha.setCellValueFactory(new PropertyValueFactory<Cita, Date>("fecha"));
columnaCitasHora.setCellValueFactory(new PropertyValueFactory<Cita, Time>("hora"));
columnaCitasPaciente.setCellValueFactory(new PropertyValueFactory<Paciente, String>("nombrePaciente"));
columnaCitasDentista.setCellValueFactory(new PropertyValueFactory<Empleado, String>("nombreEmpleado"));
columnaCitasTratamiento.setCellValueFactory(new PropertyValueFactory<Cita, Set<Tratamiento>>("listaTratamientos"));


@Entity
@Table(name = "CITA")
public class Cita implements Serializable{
private long id;
private Date fecha;
private Time hora;
private Paciente paciente;
private Empleado empleado;
private Set<Tratamiento> listaTratamientos;

public Cita() {
fecha = null;
hora = null;
paciente = null;
empleado = null;
listaTratamientos = null;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CITA_ID", nullable = false)
public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

@Column(name = "FECHA", nullable = false)
public Date getFecha() {
return fecha;
}

public void setFecha(Date fecha) {
this.fecha = fecha;
}

@Column(name = "HORA", nullable = false)
public Time getHora() {
return hora;
}

public void setHora(Time hora) {
this.hora = hora;
}

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "PACIENTE_ID")
public Paciente getPaciente() {
return paciente;
}

public void setPaciente(Paciente paciente) {
this.paciente = paciente;
}

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "EMPLEADO_ID")
public Empleado getEmpleado() {
return empleado;
}

public void setEmpleado(Empleado empleado) {
this.empleado = empleado;
}

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "CITA_TRATAMIENTO", joinColumns = {@JoinColumn(name = "CITA_ID", referencedColumnName = "CITA_ID")}, inverseJoinColumns = {@JoinColumn(name = "TRATAMIENTO_ID", referencedColumnName = "T_ID", unique = true)})
public Set<Tratamiento> getListaTratamientos() {
return listaTratamientos;
}

public void setListaTratamientos(Set<Tratamiento> listaTratamientos) {
this.listaTratamientos = listaTratamientos;
}
}


The 2 columns that are not populating are Persona and Paciente, here are the classes:

@Entity
@Table(name = "PERSONA")
@Inheritance(strategy = InheritanceType.JOINED)
public class Persona implements Serializable{
private long id;
private String nombre;
private String apellido;
private Sexo sexo;
private Date fechaNacimiento;
private String estadoCivil;
private String ocupacion;
private String nacionalidad;
private String telefono;
private String celular;
private String direccion;
private String correoElectronico;
private Date fechaRegistrado;
private Date fechaActualizado;

public Persona(){
nombre = "";
apellido = "";
sexo = null;
fechaNacimiento = null;
estadoCivil = "";
ocupacion = "";
nacionalidad = "";
telefono = "";
celular = "";
direccion = "";
correoElectronico = "";
fechaRegistrado = null;
fechaActualizado = null;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", nullable = false)
public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

@Column(name = "NOMBRE", nullable = false)
public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

@Column(name = "APELLIDO", nullable = false)
public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

@Enumerated(EnumType.STRING)
@Column(name = "SEXO", nullable = false)
public Sexo getSexo() {
return sexo;
}

public void setSexo(Sexo sexo) {
this.sexo = sexo;
}

@Column(name = "FECHA_NACIMIENTO", nullable = false)
public Date getFechaNacimiento() {
return fechaNacimiento;
}

public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}

@Column(name = "ESTADO_CIVIL")
public String getEstadoCivil() {
return estadoCivil;
}

public void setEstadoCivil(String estadoCivil) {
this.estadoCivil = estadoCivil;
}

@Column(name = "OCUPACION")
public String getOcupacion() {
return ocupacion;
}

public void setOcupacion(String ocupacion) {
this.ocupacion = ocupacion;
}

@Column(name = "NACIONALIDAD")
public String getNacionalidad() {
return nacionalidad;
}

public void setNacionalidad(String nacionalidad) {
this.nacionalidad = nacionalidad;
}

@Column(name = "TELEFONO")
public String getTelefono() {
return telefono;
}

public void setTelefono(String telefono) {
this.telefono = telefono;
}

@Column(name = "CELULAR")
public String getCelular() {
return celular;
}

public void setCelular(String celular) {
this.celular = celular;
}

@Column(name = "DIRECCION")
public String getDireccion() {
return direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

@Column(name = "CORREO_ELECTRONICO")
public String getCorreoElectronico() {
return correoElectronico;
}

public void setCorreoElectronico(String correoElectronico) {
this.correoElectronico = correoElectronico;
}

@Column(name = "FECHA_REGISTRADO", nullable = false)
public Date getFechaRegistrado() {
return fechaRegistrado;
}

public void setFechaRegistrado(Date fechaRegistrado) {
this.fechaRegistrado = fechaRegistrado;
}

@Column(name = "FECHA_ACTUALIZADO", nullable = false)
public Date getFechaActualizado() {
return fechaActualizado;
}

public void setFechaActualizado(Date fechaActualizado) {
this.fechaActualizado = fechaActualizado;
}
}

@Entity
@Table(name = "PACIENTE")
@PrimaryKeyJoinColumn(name = "PACIENTE_ID")
public class Paciente extends Persona implements Serializable {

private String nombrePaciente;

public Paciente() {
super();
}

@Transient
public String getNombrePaciente() {
return this.getNombre() + " " + this.getApellido();
}

public void setNombrePaciente(String nombrePaciente) {
this.nombrePaciente = nombrePaciente;
}
}


@Entity
@Table(name = "EMPLEADO")
@PrimaryKeyJoinColumn(name = "EMPLEADO_ID")
public class Empleado extends Persona implements Serializable {
private TipoEmpleado tipoEmpleado;
private String nombreEmpleado;

public Empleado(){
super();
tipoEmpleado = null;
}

@Column(name = "TIPO_EMPLEADO", nullable = false)
@Enumerated(EnumType.STRING)
public TipoEmpleado getTipoEmpleado() {
return tipoEmpleado;
}

public void setTipoEmpleado(TipoEmpleado tipoEmpleado) {
this.tipoEmpleado = tipoEmpleado;
}

@Transient
public String getNombreEmpleado() {
return this.getNombre() + " " + this.getApellido();
}

public void setNombreEmpleado(String nombreEmpleado) {
this.nombreEmpleado = nombreEmpleado;
}
}

Answer

You need, for example:

TableColumn<Cita, String> columnaCitasPaciente ;

// ...

columnaCitasPaciente.setCellValueFactory(cellData -> 
    new SimpleStringProperty(cellData.getValue().getPaciente().getNombrePaciente()));

and similarly for columnaCitasDentista.

Comments