У меня есть небольшая проблема при попытке отобразить данные из моей базы данных в JavaFX TableView.
У меня есть студенческий стол
user_id | name | nick | password | surname | classroom_id
---------|-----------|-----------|-----------|-----------|--------------
2 | AAA | studentA | test123 | AAA | 1
3 | BBB | studentB | test321 | BBB | 1
Эта таблица подключена к таблице класса
classroom_id | classrooName | classroomYear
--------------|--------------|-------------
1 | TestClass | 2016/2017
Я использую этот запрос, чтобы собрать всех студентов вместе с классами, к которым они принадлежат, здесь нет проблем. Когда я пытаюсь распечатать значения, все правильно.
Select student from Student student Join Fetch student.classroom
Теперь, фактическая проблема заключается в том, что classroomName и classroomYear не отображаются в TableView, как это (Jméno — имя, Příjmení-фамилия, Ник-Ник, Třída-имя класса, Rok-класс год)
Фабрика значений ячеек для этих 2 столбцов
classroomNameColumn.setCellValueFactory(new PropertyValueFactory<>("classroomName"));
classroomYearColumn.setCellValueFactory(new PropertyValueFactory<>("classroomYear"));
Теперь единственный способ, которым мне удалось получить все данные для отображения, состоял в том, чтобы добавить classroomName и classroomYear к моим классам Java, которые добавили их в качестве 2 дополнительных столбцов в базе данных. Этот вид поражает цель присоединения к ним с идентификатором я думаю, есть ли лучший способ, которым я могу получить данные класса, отображаемые в моем TableView?
EDIT: здесь студент и класс Как классы Java
@Entity
public class Student extends User{
private Classroom classroom;
public Student() {
}
public Student(String name, String surname, String nick, String password, Classroom studentClassroom) {
super(name, surname, nick, password);
this.classroom = studentClassroom;
}
@ManyToOne
@JoinColumn(name = "classroom_id")
public Classroom getClassroom() {
return classroom;
}
public void setClassroom(Classroom classroom) {
this.classroom = classroom;
}
}
@Entity
public class Classroom {
private SimpleStringProperty classroomName = new SimpleStringProperty();
private SimpleStringProperty classroomYear = new SimpleStringProperty();
private int classroom_id;
public Classroom() {
}
public Classroom(String name, String year) {
classroomName.set(name);
classroomYear.set(year);
}
@Column(nullable = false)
public String getClassroomName() {
return classroomName.get();
}
public SimpleStringProperty nameProperty() {
return classroomName;
}
public void setClassroomName(String name) {
this.classroomName.set(name);
}
@Column(nullable = false)
public String getClassroomYear() {
return classroomYear.get();
}
public SimpleStringProperty classroomYearProperty() {
return classroomYear;
}
public void setClassroomYear(String year) {
this.classroomYear.set(year);
}
@Id
@GenericGenerator(name="id" , strategy="increment")
@GeneratedValue(generator="id")
public int getClassroom_id() {
return classroom_id;
}
public void setClassroom_id(int classroom_id) {
this.classroom_id = classroom_id;
}
}
PropertyValueFactory
Вы используете ищет свойство вStudent
calledclassroomName
, который, очевидно, не существует. Необходимо реализовать фабрику значений ячеек самостоятельно:и точно так же для учебного года.