Javax.el.PropertyNotFoundException: свойство не найдено по типу org.hibernate.collection.internal.PersistentSet

Я пытаюсь восстановить данные из ассоциации ManyToMany, но я не могу, это мой код.

Entity Produit:

@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

Класс: ModuleJPADao

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;
    }
}

основного 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; я получил это erreur:

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

Ответы

Ответ 1

<h:dataTable value="#{car.terminals}" var="der">
    <p:column>
        <h:outputText value="#{der.geometrie}" />

javax.el.PropertyNotFoundException: свойство 'geometrie' не найдено в типе 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.

Если это не возможность заменить Set<E> на List<E>, просто выведите из него массив, как показано ниже:

<h:dataTable value="#{car.terminals.toArray()}" var="terminal">