在 javafx TableView 中显示外键

display foreign key in javafx TableView

名字是法语

......................

少校 = 老师

Matiere = 主题

名字 = 姓氏

prenom = firstName

.......

我使用带有 FXML 的 javafx 2 和使用 MVC 模式的休眠, 我想在 TableView

中显示 "Enseignant" 的列表

table视图结构:

<TableView fx:id="tableau" >
    <columns>
        <TableColumn fx:id="ID" prefWidth="43.0" text="ID" />
        <TableColumn fx:id="NOM" prefWidth="95.0" text="NOM" />
        <TableColumn fx:id="PRENOM" prefWidth="94.0" text="PRENOM" />
        <TableColumn fx:id="MATIERE" prefWidth="97.0" text="Matière" />
    </columns>     
  </TableView>

在数据库中我有 2 个表:

Enseignant(ID, #idMatiere, nom, prenom)
Matiere(IDMatiere, intitule)

每个 table 将被休眠用作 class

少校:

public class Enseignant  implements java.io.Serializable {

   private Integer idEnseignant;
   private Matiere matiere;
   private String nom;
   private String prenom;

马蒂埃:

public class Matiere  implements java.io.Serializable {


   private int idMatiere;
   private String intitule;

"Enseignant" 的控制器有一个方法"show()" 它显示教师列表

ID.setCellValueFactory(new PropertyValueFactory<Enseignant, Integer>("idEnseignant"));
NOM.setCellValueFactory(new PropertyValueFactory<Enseignant, String>("nom"));
PRENOM.setCellValueFactory(new PropertyValueFactory<Enseignant, String>("prenom"));
MATIERE.setCellValueFactory(new PropertyValueFactory<Enseignant, String>("matiere"));
tableau.setItems(em.getEnseignant());

最后,它显示列表正常,但 "matiere" 列引用对象,例如:hibernate.Matiere@59456543

在这种情况下,您必须更改

MATIERE.setCellValueFactory(new PropertyValueFactory<Enseignant, String>("matiere")); 

MATIERE.setCellValueFactory(new Callback<CellDataFeatures<Enseignant,String>,ObservableValue<String>>(){

                @Override
                public ObservableValue<String> call(CellDataFeatures<Enseignant, String> param) {
                    return new SimpleStringProperty(param.getValue().getMatiere().getIntitule());
                }
            });