读取xhtml(jsf)中的persistente包属性

读取xhtml(jsf)中的persistente包属性,jsf,primefaces,persistent,Jsf,Primefaces,Persistent,早上好,各位成员 你能帮我解决这个问题吗 我试图从一个对象中读取一个持久集属性,但它只返回一行,并且我在数据库表中为这样的id插入了两行 如何在dataTable中加载所有行 如何读取LinkHashSet表中加载的所有字段,如id、名称、说明等 Bean: @Inject private Pessoa pessoa; @Entity @Table(name = "pessoa",uniqueConstraints = {@UniqueConstraint(columnNames = {

早上好,各位成员

你能帮我解决这个问题吗

我试图从一个对象中读取一个持久集属性,但它只返回一行,并且我在数据库表中为这样的id插入了两行

  • 如何在dataTable中加载所有行
  • 如何读取LinkHashSet表中加载的所有字段,如id、名称、说明等
Bean:

@Inject
private Pessoa pessoa;
@Entity
@Table(name = "pessoa",uniqueConstraints = {@UniqueConstraint(columnNames = { "idt_pessoa" }) })
@Inheritance(strategy = InheritanceType.JOINED)
@OneToMany
@JoinColumn(name = "idt_pessoa")
private Set<ContatoPessoa> contatoPessoas = new LinkedHashSet<ContatoPessoa>();

public Set<ContatoPessoa> getContatoPessoas() {
    return contatoPessoas;
}

public void setContatoPessoas(Set<ContatoPessoa> contatoPessoas) {
    this.contatoPessoas = contatoPessoas;
}
@Entity
@Table(name="contato_pessoa")
public class ContatoPessoa implements Entidade{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idt_contatoPessoa")
private Long id;

@Column(length=100)
private String des_areaContatoPessoa;

@Column(length=100)
private String des_emailContatoPessoa;
<p:dataTable id="dTContato" var="contatoPessoas"
value="#{pessoaMB.pessoa.contatoPessoas}"
rowKey="#{pessoa.contatoPessoas.id}">
<p:column headerText="#{bundle.pessoa_lblid}">
<p:outputLabel value="#{contatoPessoas.key}"/>
</p:column>
实体Pessoa:

@Inject
private Pessoa pessoa;
@Entity
@Table(name = "pessoa",uniqueConstraints = {@UniqueConstraint(columnNames = { "idt_pessoa" }) })
@Inheritance(strategy = InheritanceType.JOINED)
@OneToMany
@JoinColumn(name = "idt_pessoa")
private Set<ContatoPessoa> contatoPessoas = new LinkedHashSet<ContatoPessoa>();

public Set<ContatoPessoa> getContatoPessoas() {
    return contatoPessoas;
}

public void setContatoPessoas(Set<ContatoPessoa> contatoPessoas) {
    this.contatoPessoas = contatoPessoas;
}
@Entity
@Table(name="contato_pessoa")
public class ContatoPessoa implements Entidade{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idt_contatoPessoa")
private Long id;

@Column(length=100)
private String des_areaContatoPessoa;

@Column(length=100)
private String des_emailContatoPessoa;
<p:dataTable id="dTContato" var="contatoPessoas"
value="#{pessoaMB.pessoa.contatoPessoas}"
rowKey="#{pessoa.contatoPessoas.id}">
<p:column headerText="#{bundle.pessoa_lblid}">
<p:outputLabel value="#{contatoPessoas.key}"/>
</p:column>
在xhtml中:

@Inject
private Pessoa pessoa;
@Entity
@Table(name = "pessoa",uniqueConstraints = {@UniqueConstraint(columnNames = { "idt_pessoa" }) })
@Inheritance(strategy = InheritanceType.JOINED)
@OneToMany
@JoinColumn(name = "idt_pessoa")
private Set<ContatoPessoa> contatoPessoas = new LinkedHashSet<ContatoPessoa>();

public Set<ContatoPessoa> getContatoPessoas() {
    return contatoPessoas;
}

public void setContatoPessoas(Set<ContatoPessoa> contatoPessoas) {
    this.contatoPessoas = contatoPessoas;
}
@Entity
@Table(name="contato_pessoa")
public class ContatoPessoa implements Entidade{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idt_contatoPessoa")
private Long id;

@Column(length=100)
private String des_areaContatoPessoa;

@Column(length=100)
private String des_emailContatoPessoa;
<p:dataTable id="dTContato" var="contatoPessoas"
value="#{pessoaMB.pessoa.contatoPessoas}"
rowKey="#{pessoa.contatoPessoas.id}">
<p:column headerText="#{bundle.pessoa_lblid}">
<p:outputLabel value="#{contatoPessoas.key}"/>
</p:column>

我在xhtml
p:outputLabel
中尝试了不同的组合,但没有成功

我从一个对象
pessoa
观察了持久集,它有值。行李是一个
ArrayList


我没有发布图片的名声。抱歉

对我来说,似乎您在outputLabel中使用了错误的var变量。在您的表中定义了
var=“car”
。因此,不是:

<p:outputLabel value="#{pessoa.contatoPessoas.id}"/>
更新

另外,您的
rowKey
属性似乎错误,请按如下方式更改:

rowKey="#{contatoPessoas.id}"
更新


正如上面提到的@Ammar一样,set也有一个问题,它在2.2版之前的JSF中不受支持。所以另一个解决方案是升级到JSF2.2,好的,现在我知道发生了什么。。。不能在数据表中使用集合。你必须使用一些有序的集合。有关详细信息,请参阅。。。。我建议创建一种新方法

public List<ContatoPessoa> getContatoPessoasList() {
    return new ArrayList<ContatoPessoa>(contatoPessoas);
}
public List getContatoPessoasList(){
返回新的ArrayList(contatoPessoas);
}

并将绑定更改为:
value=“#{pessoaMB.pessoa.contatoPessoasList}”

请发布您的java代码。您是否看到表中的行且id列为空,或者根本看不到任何行?Ammar,我的dataTable只加载所有空行。我确实看到表和id列中的行,其他列是empty@BalusC你的评论消失了。我不知道为什么。Infragile,我将此错误更改为#{car.id}->类“org.hibernate.collection.internal.PersistentSet”没有属性“id”。奇怪。。。请发布您的整个
p:dataTable
标记(更新您的问题)好的,现在您可以用这种方式发布所有对象-
pessoaMB.pessoa.contatopesoas
-pessoaMB,pessoa,contatopesoas我没有信用卡发布图像。您需要什么样的信息来@Infragile?我在发布这篇文章时没有问题,但是后面有一堆代码。lolI想检查这个路径是否真的正常-
pessoaMB.pessoa.contatoPessoas
yes。我已经阅读了你发布的链接。问题是当我实现这个属性时,List Hybernate告诉我有多个fetch连接,这是因为我连接了更多的表。我就是这样工作的。你怎么看?公共对象[]getContatoPessoas(){List List List=new ArrayList();for(Object val:contatoPessoas){if(!List.contains(val)){List.add((ContatoPessoa)val);}}}List.toArray(新对象[0]);return List.toArray(新对象[0]);}***它是这样工作的@Infragile****我不希望您更改hibernate绑定。。。保留hibernate的设置,但是对于UI,添加
getContatoPessoasList
方法,它不应该产生hibernate错误。。。我不知道为什么需要Object[]而不是List。。。但我很高兴看到它的工作原理:)***解决了******@Ammar我保持了hibernate绑定,并按照您告诉我的方式设置UI。那很好。。。。谢谢