我的POJO有另一个POJO作为字段(来自数据库的实体)。我已经能够绑定所有正常字段,但我正在努力绑定此实体字段。
人POJO:
package net.sourceforge.javydreamercsw.msm.db;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@TableGenerator(name = "PERSON_GEN",
table = "SEQUENCES",
pkColumnName = "SEQ_NAME",
valueColumnName = "SEQ_NUMBER",
pkColumnValue = "PERSON",
allocationSize = 1,
initialValue = 1000)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "PERSON_GEN")
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Column(name = "attempts")
private Integer attempts = 0;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "name")
private String name;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "lastname")
private String lastname;
@Basic(optional = false)
@NotNull
@Size(min = 5, max = 45)
@Column(name = "username")
private String username;
@Basic(optional = false)
@NotNull
@Size(min = 6, max = 45)
@Column(name = "password")
private String password;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 11)
@Column(name = "ssn")
private String ssn="XXX-XX-XXXX";
@JoinColumn(name = "access_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private Access accessId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person")
private List<PersonHasService> personHasServiceList;
@Basic(optional = false)
@Column(name = "login")
@Temporal(TemporalType.TIMESTAMP)
private Date login;
}
访问POJO:
package net.sourceforge.javydreamercsw.msm.db;
public class Access implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@TableGenerator(name = "ACCESS_GEN",
table = "SEQUENCES",
pkColumnName = "SEQ_NAME",
valueColumnName = "SEQ_NUMBER",
pkColumnValue = "ACCESS",
allocationSize = 1,
initialValue = 1000)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "ACCESS_GEN")
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "name")
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "accessId")
private List<Person> personList;
}
我将它绑定到这样的表:
private void updateTableData() {
List<Person> persons
= new PersonJpaController(DataBaseManager.getEntityManagerFactory()).findPersonEntities();
BeanItemContainer<Person> container = new BeanItemContainer<>(
Person.class, persons);
table.setContainerDataSource(container);
table.setVisibleColumns("name", "lastname", "username", "ssn", "accessId");
table.setColumnHeaders(new String[]{
rb.getString("general.first.name"),
rb.getString("general.last.name"),
rb.getString("general.username"),
rb.getString("general.ssn"),
rb.getString("general.access")});
table.sort(new Object[]{"name", "lastname"}, new boolean[]{
true, true});
}
我试图让访问列显示Access名称字段,而不是显示该类的toString方法。
更新:以下是我的工作方式:
private void updateTableData() {
List<Person> persons
= new PersonJpaController(DataBaseManager.getEntityManagerFactory()).findPersonEntities();
BeanItemContainer<Person> container = new BeanItemContainer<>(
Person.class, persons);
table.setContainerDataSource(container);
table.setVisibleColumns("name", "lastname", "username", "ssn", "accessId");
table.setColumnHeaders(new String[]{
rb.getString("general.first.name"),
rb.getString("general.last.name"),
rb.getString("general.username"),
rb.getString("general.ssn"),
rb.getString("general.access")});
table.addGeneratedColumn(rb.getString("general.access"), new RuleGenerator());
table.sort(new Object[]{"name", "lastname"}, new boolean[]{
true, true});
}
然后是新方法:
public class RuleGenerator implements Table.ColumnGenerator {
@Override
public Object generateCell(Table source, Object itemId, Object columnId) {
Label label = new Label();
label.setValue(rb.getString(((Person) itemId).getAccessId().getName()));
return label;
}
}