我尝试从关联 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; 
 
} 

类:模块服务
public List<Produit> tousModuleProduit(String produit) { 
 
    if(produit!= null){ 
        return moduleDao.parProduit(produit); 
    } 
    else{ 
        return null; 
    } 
} 

主流.xml
<view-state id="accueil" view="accueil.xhtml"> 
    <on-render> 
        <evaluate expression="moduleService.tousModuleProduit(module.getProduit())" 
            result="viewScope.recherche" /> 
 
    </on-render> 
</view-state> 

文件.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> 
        .... 

我无法获得几何的值(value);我有这个错误:

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: 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> 的内置支持将在 future 的 JSF 2.3 版本中出现。

如果无法替换 Set<E>通过 List<E> ,然后只需从中获取一个数组,如下所示:
<h:dataTable value="#{car.terminals.toArray()}" var="terminal"> 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!