【发布时间】:2019-05-11 11:04:31
【问题描述】:
我正在尝试使用 JavaFX 8 和休眠中的 TableView 映射和显示表之间存在一对一关系的数据。
表格:
@Entity
@Table(name = "CLUB")
public class Club implements Serializable {
@Id
@Column(name = "CLUB_ID", nullable = false, unique = true)
private int clubId;
@Column(name = "NAME", nullable = false, length = 100)
private String name;
@Column(name = "CITY", length = 50)
private String city;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "club", cascade = CascadeType.ALL)
private Trainer trainer;
// constructor, getters, setters
}
和
@Entity
@Table(name = "TRAINER")
public class Trainer implements Serializable {
@Id
@Column(name = "LICENCE_NR", nullable = false, unique = true)
private int licenceNr;
@Column(name = "NAME", nullable = false, length = 50)
private String name;
@Column(name = "SURNAME", nullable = false, length = 50)
private String surname;
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
private Club club;
// constructor, getters, setters
}
ClubController 类与TableView:
public class ClubController implements Initializable {
...
@FXML
private TableView<Club> clubTableView;
@FXML
private TableColumn<Club, String> nameColumn;
@FXML
private TableColumn<Club, String> cityColumn;
@FXML
private TableColumn<Club, Integer> trainerColumn;
@Override
public void initialize(URL location, ResourceBundle resources) {
nameColumn.setCellValueFactory(new PropertyValueFactory<Club, String>("name"));
cityColumn.setCellValueFactory(new PropertyValueFactory<Club, String>("city"));
trainerColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Club, Integer>, ObservableValue<Integer>>() {
@Override
public ObservableValue<Integer> call(TableColumn.CellDataFeatures<Club, Integer> param) {
return new SimpleIntegerProperty(param.getValue().getTrainer().getLicenceNr()).asObject();
}
});
clubTableView.setItems(getClub());
}
private ObservableList<Club> getClub() {
ObservableList<Club> clubList = FXCollections.observableArrayList();
Session session = HibernateUtil.config().openSession();
List<Club> cList = session.createCriteria(Club.class).list();
clubList.addAll(cList);
session.close();
return clubList;
}
...
}
前两列工作正常,但在trainerColumn 我有 NPE。如何解决?
【问题讨论】:
-
SimpleIntegerProperty的构造函数将原始的int值作为参数。这意味着属性不能包含null值。 (不过,NPE 是可能的。因此,要么问题的描述具有误导性,要么您没有发布重现问题所需的代码...... -
是的,你是对的,它是 NPE,不是空值。
标签: java hibernate jpa javafx collections