java JSF显示OneToMany实体
我将两个实体连接在一起并执行命名查询。当我试图在JSF页面上显示它们时,我看不到数据。但是,在调试中,我可以看到实体和数据
JSF页面
<ui:repeat id="headerList" var="header" value="#{tModel.tHeader}">
<tr>
<td>#{header.rbid}</td>
<td>#{header.uploadTimestamp}</td>
<td>
<ui:repeat id="authList" var="auth" value="#{header.auth}">
#{auth.username}
</ui:repeat>
</td>
</tr>
</ui:repeat>
模型
public Collection<THeader> getTHeader() {
return tHeader;
}
public void init() {
tHeader = getEntityManager().createNamedQuery("THeader.findByUsername").setParameter("username", userBeanRef.get().getUserName()).getResultList();
}
标题实体
@Entity
@Table(name = "theader")
@NamedQueries({
@NamedQuery(name="THeader.findByUsername",
query="SELECT h, a FROM THeader h INNER JOIN h.auth a WHERE a.username = :username")
})
public class THeader {
private static final long serialVersionUID = -5906810279679409035L;
@Column(name = "rbid")
private String rbid;
@JoinColumn(name = "header_id")
@OneToMany
private List<TAuth> auth;
@Column(name = "upload_timestamp")
@Temporal(TemporalType.TIMESTAMP)
private Date upload_timestamp;
public String getRbid() {
return rbid;
}
public void setRbid(String rbid) {
this.rbid = rbid;
}
public List<TAuth> getAuth() {
return auth;
}
public void setAuth(List<TAuth> auth) {
this.auth = auth;
}
public Date getUploadTimestamp() {
return upload_timestamp;
}
public void setUploadTimestamp(Date upload_timestamp) {
this.upload_timestamp = upload_timestamp;
}
}
身份验证实体
@Entity
@Table(name = "tauth")
public class TAuth {
private static final long serialVersionUID = -5906752349589409035L;
@Column(name = "username")
private String username;
@Column(name = "header_id")
private int header_id;
public int getHeader_id() {
return header_id;
}
public void setHeader_id(int header_id) {
this.header_id = header_id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
# 1 楼答案
问题出现在UI中:重复我使用的是var=“header”。使用不同的名称(如var=“hdr”)解决了该问题