2016-12-31 3 views
0

У меня небольшая проблема при попытке отображения данных из моей базы данных в JavaFX TableView.Проблема с JFX TableView и HQL-запросом

У меня есть таблица

user_id | name | nick | password | surname | classroom_id 
---------|-----------|-----------|-----------|-----------|-------------- 
    2  | AAA  | studentA | test123 | AAA  |  1 
    3  | BBB  | studentB | test321 | BBB  |  1 

Эта таблица соединена с таблицей Classroom

classroom_id | classrooName | classroomYear 
--------------|--------------|------------- 
     1  | TestClass | 2016/2017 

Я использую этот запрос, чтобы получить все студенты вместе с аудиториях они принадлежат, ни один студент вопрос здесь. Когда я пытаюсь распечатать значения, все правильно.

Select student from Student student Join Fetch student.classroom 

Теперь, реальная проблема в том, что classroomName и classroomYear не отображаются в TableView, как this (Jméno - Имя, Příjmení - Фамилия, Ник - Ник, Třída - название Classroom, Rok- Классный год)

значение ячейки завода для этих 2 колонки

classroomNameColumn.setCellValueFactory(new PropertyValueFactory<>("classroomName")); 

classroomYearColumn.setCellValueFactory(new PropertyValueFactory<>("classroomYear")); 

Теперь, единственный способ, которым я сумел получить все данные, которые будут отображаться были добавить classroomName и classroomYear мои Java классов, которые добавили их в качестве 2 дополнительные столбцы в база данных. Этот тип поражения объединяет их с id, я думаю, есть ли лучший способ получить данные о классе, отображаемые в моем 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; 
    } 
} 

ответ

0

PropertyValueFactory вы используете ищет недвижимость в Student под названием classroomName, который, очевидно, не существует. Вам необходимо самостоятельно реализовать завод по производству ячеек:

// assuming you declared 
TableColumn<Student, String> classroomNameColumn ; 

// ... 

classroomNameColumn.setCellValueFactory(cellData -> { 
    Student student = cellData.getValue(); 
    Classroom classroom = student.getClassroom(); 
    if (classroom == null) return new SimpleStringProperty(""); 
    return classroom.nameProperty(); 
}); 

и аналогичным образом для классного года.

+0

Удивительный, работает как шарм. Я понял, что это потому, что в классе Student нет класса и имени, но я понятия не имел, как его написать. Большое спасибо. –

Смежные вопросы