Vaadin Viritin MultiSelectTable 选择工作不正常

Vaadin Viritin MultiSelectTable selection is not working properly

我使用 Viritin MultiSelectTable 来显示 JPA 实体。实体显示正确,但当我单击一行时,所有行都被选中。

我初始化我的 table 如下:

MultiSelectTable<MyEntity> acFiles = new MultiSelectTable<MyEntity>().withProperties(
        "filedate",
        "filesize",
        "rows",
        "filename"
);

acFiles.setOptions(myDAO.findAll());

acFiles.addListener(((Listener) event -> {
    System.out.println("Clicked Row");
}));

我哪里做错了,每次点击都选中所有行?

这些症状听起来像是您在 MyEntity class 中以某种方式错误地实施了 equals/hashCode 方法实施,并且 Vaadin 对您的所有对象都一视同仁。如果它是一个 JPA 实体,一个很好的工作策略是像这样实现它们:

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if(this.id == null) {
        return false;
    }

    if (obj instanceof MyEntity && obj.getClass().equals(getClass())) {
        return this.id.equals(((MyEntity) obj).id);
    }

    return false;
}

@Override
public int hashCode() {
    int hash = 5;
    hash = 43 * hash + Objects.hashCode(this.id);
    return hash;
}

"perfect way" 取决于您如何使用标识符。