【问题标题】:JavaFX TableView with HIbernate带有 HIbernate 的 JavaFX TableView
【发布时间】:2015-11-05 12:03:55
【问题描述】:

我正在尝试使用 Hibernate 开发 JavaFX 桌面应用程序。 在我的数据模型中,我有两个实体(玩家、团队)。每个玩家都属于一个团队。

播放器

id : 整数 名字:字符串 姓氏:字符串 ref_Team : int

团队

id : 整数 名称:字符串

在我的应用程序中,我目前每个实体都有两个表,并且一切正常。但现在我想更进一步,在 Team-Entity 的 TableView 中,我打算添加一列“Players Count”。

我知道如何绑定 TableColumn,例如 firstNameCol.setCellValueFactory((数据) -> data.getValue().firstNameProperty());

但在我的 Team-Entity 中,没有用于计算 Players 的属性。 任何想法如何绑定 numberOfPlayerCol?

【问题讨论】:

    标签: hibernate javafx tableview tablecolumn


    【解决方案1】:

    假设您的所有玩家都有一个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 匹配的字段,但思路是一样的)。

    【讨论】:

    • 优秀的答案。谢谢詹姆斯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2020-06-30
    • 2017-05-24
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    相关资源
    最近更新 更多