2016-12-31 10 views
0

JavaFX TableViewでデータベースからデータを表示しようとすると、小さな問題が発生します。JFX TableViewとHQLクエリの問題

私は私がいない、彼らはに属している教室と一緒にすべての学生を取得するには、このクエリを使用しています。このテーブルは

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

教室のテーブルに接続されたStudentテーブルに

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

を持っていますここで問題を起こす。値を印刷しようとすると、すべて正しいです。今

Select student from Student student Join Fetch student.classroom 

、実際の問題はclassroomNameとclassroomYearがthisのように、テーブルビューに表示されていないということです(Jméno - Rok-教室の年、教室名、名前、Příjmení - 姓、ニック - - ニック、Třída)

これらの2つの列のセル値の工場は今

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

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

あり、私はすべてのデータが表示された取得する得ることができた唯一の方法は、2として、それらを追加私のJavaクラスにclassroomNameとclassroomYearを追加しました列の余分な列データベース。私の考えるIDとそれらを結びつけるという目的を破っているのですが、私のTableViewにClassroomのデータを表示する方法はありますか?

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は明らかに存在しないclassroomName呼ばStudentでプロパティ、探しているとここでは、学生や教室です。

// 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

素晴らしいですが、魅力的です。教室がないので、私はそれが学生クラスの年と名前が分かったが、私はそれを書く方法を知らなかった。どうもありがとうございました。 –