我尝试从协会ManyToMany中调出数据,但是我不能,这是我的代码。
实体产品:
@Entity public class Produit implements Serializable { @Id @Column(name="Produit_ID") @GeneratedValue private Long id; private String dq; private String icForme; private String ich; private String icht; @ManyToMany(cascade = {CascadeType.ALL}) @JoinTable(name="produit_terminal", joinColumns={@JoinColumn(name="Produit_ID")}, inverseJoinColumns={@JoinColumn(name="Terminal_ID")}) private Set<Terminal> terminals = new HashSet<Terminal>(); //getter setter
实体终端:
@Entity public class Terminal implements Serializable{ @Id @GeneratedValue @Column(name="Terminal_ID") private Long id; private String crimpkontakt; private String equipment; private String geometrie; private String dcbt; private String icb; private String ak; @ManyToMany(mappedBy="terminals") private Set<Produit> produit = new HashSet<Produit>(); //getter setter
类别:模块JPADao
public List<Produit> parProduit(String cat){ cat = "%" + cat + "%"; Query query = getEntityManger().createQuery( "from "+ getPersistentClass().getSimpleName() +" u where u.produit LIKE :cat").setParameter( "cat", cat ); List<Produit> module = (List) query.getResultList(); return module; }
类别:ModuleService
public List<Produit> tousModuleProduit(String produit) { if(produit!= null){ return moduleDao.parProduit(produit); } else{ return null; } }
main-flow.xml
<view-state id="accueil" view="accueil.xhtml"> <on-render> <evaluate expression="moduleService.tousModuleProduit(module.getProduit())" result="viewScope.recherche" /> </on-render> </view-state>
file.xhtml
<p:accordionPanel value="#{recherche}" var="car"> <p:tab title="IcForme : #{car.icForme}"> <h:panelGrid columns="4" cellspacing="20"> <p:outputLabel value="ICHT: " /> <p:inputText value="#{car.icht}" /> <p:outputLabel value="terminals : " /> <h:form> <h:dataTable value="#{car.terminals}" var="der" > <p:column> <h:outputText value="#{der.geometrie}" /> </p:column> </h:dataTable> </h:form> </h:panelGrid> ....
我无法获得几何的价值;我得到这个错误:
javax.el.PropertyNotFoundException:/WEB-INF/flows/main/accueil.xhtml @ 84,53 value =“#{der.geometrie}”:在类型org.hibernate.collection.internal.PersistentSet上找不到属性'geometrie'
<h:dataTable value="#{car.terminals}" var="der"> <p:column> <h:outputText value="#{der.geometrie}" /> javax.el.PropertyNotFoundException:在类型org.hibernate.collection.internal.PersistentSet上找不到属性“ geometrie”
<h:dataTable value="#{car.terminals}" var="der"> <p:column> <h:outputText value="#{der.geometrie}" />
javax.el.PropertyNotFoundException:在类型org.hibernate.collection.internal.PersistentSet上找不到属性“ geometrie”
因此,#{car.terminals}是Set<E>。的<h:dataTable>,<p:dataTable>而<ui:repeat>组件不支持迭代一个Set<E>。这样,#{der}遗嘱基本上就代表了Set<E>自己。Set<E>将来的JSF 2.3版本将提供对迭代的内置支持。
#{car.terminals}
Set<E>
<h:dataTable>
<p:dataTable>
<ui:repeat>
#{der}
如果不是更换一个选项Set<E>被List<E>,然后就得到一个阵列出来的,如下:
List<E>
<h:dataTable value="#{car.terminals.toArray()}" var="terminal">