Java Vaadin Viritin多选选择无法正常工作

Java Vaadin Viritin多选选择无法正常工作,java,vaadin,Java,Vaadin,我使用Viritin MultiSelectTable来显示JPA实体。实体显示正确,但当我单击一行时,所有行都被选中 我按如下方式初始化我的表: MultiSelectTable<MyEntity> acFiles = new MultiSelectTable<MyEntity>().withProperties( "filedate", "filesize", "rows", "filename" );

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

我按如下方式初始化我的表:

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

acFiles.setOptions(myDAO.findAll());

acFiles.addListener(((Listener) event -> {
    System.out.println("Clicked Row");
}));
multiselectable acFiles=new multiselectable().withProperties(
“文件日期”,
“文件大小”,
“行”,
“文件名”
);
setOptions(myDAO.findAll());
acFiles.addListener(((Listener)事件->{
System.out.println(“单击行”);
}));

我做错了什么,以至于每次单击时都选择了所有行?

这些症状听起来像是在MyEntity类中错误地实现了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;
}
“完美方式”取决于您如何使用标识符