Hibernate Vaadin表格隐藏列和容器自定义

Hibernate Vaadin表格隐藏列和容器自定义,hibernate,vaadin,Hibernate,Vaadin,我正在测试一个项目,使用Vaadin和Hibernate。我试图使用HbnContainer类将数据显示到表中。问题是我不想在表中显示这两个类的所有属性 例如: @Entity @Table(name="users") class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String name; @ManyToOne(cascade=CascadeType.PERSIST

我正在测试一个项目,使用Vaadin和Hibernate。我试图使用HbnContainer类将数据显示到表中。问题是我不想在表中显示这两个类的所有属性

例如:

@Entity
@Table(name="users")
class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;

@ManyToOne(cascade=CascadeType.PERSIST)
private UserRole role;

//getters and setters
}
第二类:

@Entity
@Table(name="user_roles")
class UserRole {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;

//getters and setters
}
接下来,我使用HbnContainer检索数据,并将其连接到表:

HbnContainer container = new HbnContainer(User.class, app);
table.setContainerDataSource(container);
该表将只显示来自用户的列,对于“角色”,它将放置角色id。如何隐藏该列,并将其替换为UserRole.name

我设法使用ColumnGenerator()获取表中UserRole的字符串值,但我无法删除上一列的数值

我错过了什么?或者,在显示表之前,“自定义”数据的最佳方式是什么(如果我想在表中显示来自多个对象类型的数据..我该怎么办?)

如果我不能很快找到一个简单的解决方案,我想我会“手工”建立表格

那么,对这件事有什么建议吗

编辑:
我很久以前就没有向他表达过自己的观点。我需要知道的是如何使用嵌套POJO和HbnContainer,并控制表中显示的属性(和“子属性”)。我试图扩展和重新实现HbnContainer的某些部分,但是。。无法正确完成此操作。

对于上一个示例,从Users表生成的表如下所示:

Name  |Role
George| 1
Alex  | 2 
我想要像这样的东西:

Name  | Role
George| admin
Alex  | user

您要做的是定义哪些属性应该在表中可见(从而排除角色id)。这可以通过该方法实现。

您要做的是定义哪些属性应该在表中可见(从而排除角色id)。这可以通过这种方法实现。

我和你有同样的问题,这很有帮助(希望它也能帮助你)


我和你有同样的问题,这有帮助(希望它也能帮助你)


您可以在表类中重写
formatPropertyValue
方法,而不是隐藏列/添加生成的列

final Table table = new Table() {
    @Override
    protected String formatPropertyValue(Object rowId, Object colId, Property property) {
        if ("column".equals(colId)) {
            return "something";
        }

        return super.formatPropertyValue(rowId, colId, property);
    }
};
要获取POJO(在您的案例中为用户对象),可以使用以下构造:

User blogger = (User) ((HbnContainer.EntityItem.EntityItemProperty) property).getPojo();

您可以在表类中重写
formatPropertyValue
方法,而不是隐藏列/添加生成的列

final Table table = new Table() {
    @Override
    protected String formatPropertyValue(Object rowId, Object colId, Property property) {
        if ("column".equals(colId)) {
            return "something";
        }

        return super.formatPropertyValue(rowId, colId, property);
    }
};
要获取POJO(在您的案例中为用户对象),可以使用以下构造:

User blogger = (User) ((HbnContainer.EntityItem.EntityItemProperty) property).getPojo();