javax.el.PropertyNotFoundException:属性 未在类型 org.hibernate.collection.internal.PersistentSet 上找到
javax.el.PropertyNotFoundException: Property not found on type org.hibernate.collection.internal.PersistentSet
我尝试从 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
Class:模块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;
}
Class:模块服务
public List<Produit> tousModuleProduit(String produit) {
if(produit!= null){
return moduleDao.parProduit(produit);
}
else{
return null;
}
}
主要-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>
....
我无法获取geometrie的值;我得到了这个错误:
javax.el.PropertyNotFoundException: /WEB-INF/flows/main/accueil.xhtml @84,53 value="#{der.geometrie}": Property 'geometrie' not found on type org.hibernate.collection.internal.PersistentSet
<h:dataTable value="#{car.terminals}" var="der">
<p:column>
<h:outputText value="#{der.geometrie}" />
javax.el.PropertyNotFoundException: Property 'geometrie' not found on type org.hibernate.collection.internal.PersistentSet
因此,#{car.terminals}
是 Set<E>
。 <h:dataTable>
、<p:dataTable>
和 <ui:repeat>
组件不支持迭代 Set<E>
。 #{der}
将基本上代表 Set<E>
本身。对遍历 Set<E>
的内置支持将出现在未来的 JSF 2.3 版本中。
如果用 List<E>
替换 Set<E>
不是一个选项,那么只需从中取出一个数组,如下所示:
<h:dataTable value="#{car.terminals.toArray()}" var="terminal">
我尝试从 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
Class:模块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;
}
Class:模块服务
public List<Produit> tousModuleProduit(String produit) {
if(produit!= null){
return moduleDao.parProduit(produit);
}
else{
return null;
}
}
主要-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>
....
我无法获取geometrie的值;我得到了这个错误:
javax.el.PropertyNotFoundException: /WEB-INF/flows/main/accueil.xhtml @84,53 value="#{der.geometrie}": Property 'geometrie' not found on type org.hibernate.collection.internal.PersistentSet
<h:dataTable value="#{car.terminals}" var="der"> <p:column> <h:outputText value="#{der.geometrie}" />
javax.el.PropertyNotFoundException: Property 'geometrie' not found on type org.hibernate.collection.internal.PersistentSet
因此,#{car.terminals}
是 Set<E>
。 <h:dataTable>
、<p:dataTable>
和 <ui:repeat>
组件不支持迭代 Set<E>
。 #{der}
将基本上代表 Set<E>
本身。对遍历 Set<E>
的内置支持将出现在未来的 JSF 2.3 版本中。
如果用 List<E>
替换 Set<E>
不是一个选项,那么只需从中取出一个数组,如下所示:
<h:dataTable value="#{car.terminals.toArray()}" var="terminal">