我正在尝试使用Hibernate开发JavaFX桌面应用程序。 在我的数据模型中,我有两个实体(播放器,团队)。每个玩家都属于一个团队。
播放器
id:int firstName:String lastName:String ref_Team:int
团队
id:int 名称:字符串
在我的应用程序中,我每个实体目前有两个表,一切运行良好。但是现在我想更进一步,在TableView for Team-Entity中我打算添加一个列" Players Count"。
我知道如何绑定TableColumn,例如 firstNameCol.setCellValueFactory((data) - > data.getValue()。firstNameProperty());
但在我的团队实体中,没有计算玩家数量的属性。 任何想法如何绑定numberOfPlayerCol?
答案 0 :(得分:2)
假设你有一个ObservableList<Player>
所有玩家,你可以做类似
ObservableList<Player> allPlayers = ... ;
TableView<Team> table = new TableView<>();
TableColumn<Team, Number> playerCountCol = new TableColumn<>("Players count");
playerCountCol.setCellValueFactory(cellData ->
Bindings.createLongBinding(() ->
allPlayers.stream()
.filter(player -> player.getTeamId() == cellData.getValue().getId())
.collect(Collectors.counting()),
allPlayers));
这是一种相当强力的方法,可以随时根据需要计算所有内容。如果遇到性能问题,您可能需要做一些更复杂的事情。不过,这应适用于适度大小的数据集。
以下是指向quick example的链接(Player
此处有Team
的直接引用,而不是与其ID匹配的字段,但想法是相同的。)< / p>