Mysql 如何更新包含外键字段错误的数据表行:javax.el.ELException:无法转换

Mysql 如何更新包含外键字段错误的数据表行:javax.el.ELException:无法转换,mysql,hibernate,jsf,primefaces,foreign-key-relationship,Mysql,Hibernate,Jsf,Primefaces,Foreign Key Relationship,我有一个在dao中返回列表的方法,如下所示。 我必须返回一个对象,因为我有一个连接查询 public List<Object> getAllBudgets(Integer id) { Session session=HibernateUtil.getSession(); try { session.beginTransaction(); Query q = session.createQu

我有一个在dao中返回列表的方法,如下所示。 我必须返回一个对象,因为我有一个连接查询

public List<Object> getAllBudgets(Integer id) {
        Session session=HibernateUtil.getSession();
        try
        {
            session.beginTransaction();
            Query q = session.createQuery("select r.libelleRubrique, b.creditOuvert, b.creditReporte from Rubrique r, Budgetisation b where r.idRubrique = b.rubrique and b.id.annee =:annee");
            q.setParameter("annee", id);
            listeBudgets = q.list();
            return listeBudgets;
        }
        catch(HibernateException e)
        {
            throw e;
        }
        finally
        {
            session.close();
        }
    }
budget.xhtml

   <h:body>
    <h:form id="form">
       <h:panelGrid columns="2" cellpadding="5">
       <h:outputText value="Annee : " style="font-size: 18px" />
       <p:selectOneMenu value="#{anneeBean.annee}"  >
       <f:selectItem itemValue="#{null}" itemLabel="--Séléctionner une année--" />
       <f:selectItems value="#{anneeBean.listeAnnees}" var="annee" 
                      itemValue="#{annee}" itemLabel="#{annee}" />
      <f:ajax listener="#{anneeBean.submit()}" render="display" />
    </p:selectOneMenu>
       </h:panelGrid>
        <br></br>
        <br></br>
        <p:dataTable id="display" var="listeBudgets" value="#{budgetisationBean.listeBudgets}" editable="true" style="margin-bottom:10px">
        <f:facet name="header">
           Budgetisation
        </f:facet>

       <p:column headerText="Libelle rubrique">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeBudgets[0]}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{listeBudgets[0]}" style="width:100%"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column headerText="Crédit ouvert">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeBudgets[1]}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{listeBudgets[1]}" style="width:100%" label="Year"/></f:facet>
           </p:cellEditor>
       </p:column>
  <p:column headerText="Crédit reporté ">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeBudgets[2]}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{listeBudgets[2]}" style="width:100%" label="Year"/></f:facet>
           </p:cellEditor>
       </p:column>
<p:column style="width:32px" headerText="Modifier">
    <p:commandLink styleClass="ui-icon ui-icon-pencil" action="#{budgetisationBean.update()}" process="@this" update="" oncomplete="budgetDialog.show()">
        <f:setPropertyActionListener target="#{budgetisationBean.budget}" value="#{listeBudgets}" />
    </p:commandLink>
       </p:column>
           <p:column style="width:32px" headerText="Supprimer">
    <p:commandLink styleClass="ui-icon ui-icon-trash" action="#{organismedecreditBean.delete()}" process="@this" update=":form:display">
     <f:setPropertyActionListener target="#{budgetisationBean.budget}" value="#{listeBudgets}" />
    </p:commandLink>
       </p:column>
        </p:dataTable>
     <p:dialog header="Modification du budget" widgetVar="budgetDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
        <p:outputPanel id="budgetDetail" style="text-align:center;">
            <p:panelGrid  columns="2" rendered="#{ empty budgetisationBean.budget}" columnClasses="label,value">
              <h:outputText value="Rubrique : " />
    <p:selectOneMenu>
        <f:selectItem itemValue="#{budgetisationBean.budget.id.idRubrique}" itemLabel="#{budgetisationBean.budget.id.idRubrique}" />
    </p:selectOneMenu>

      <br></br>
                                    <h:outputText value="Crédit ouvert: " />
                                    <p:inputText value="#{budgetisationBean.budget.creditOuvert}"/>
<br></br>
                                    <h:outputText value="Crédit reporté: " />
                                    <p:inputText value="#{budgetisationBean.budget.creditReporte}"/>
<br></br>

                <p:commandButton value="Valider" update="display" icon="ui-icon-search" styleClass="ui-priority-primary" />

            </p:panelGrid>
        </p:outputPanel>
    </p:dialog>
    </h:form>
   </h:body>





预算化





BudgetisationBean.java

package controller;

@Component
@Scope("view")
public class BudgetisationBean implements java.io.Serializable{

    @Autowired
    private BudgetisationMetier budgetisationMetier;
    @Autowired
    private RubriqueMetier rubriqueMetier;
    private List<Object> listeBudgets;
    private List<Annee> listeAnnees;
    private List<Object> listeRubriques;
    private Budgetisation budget;
    private BudgetisationId id;
    private Rubrique rubrique;
    private Annee annee;
    private Double creditOuvert;
    private Double modification;
    private Double creditReporte;


    @PostConstruct
    public void init() {
        listeAnnees = budgetisationMetier.getListeAnnee();
        listeRubriques = budgetisationMetier.getAllRubriquesNonBudgets();
    }

    public List<Object> getListeRubriques() {
        return listeRubriques;
    }

    public void setListeRubriques(List<Object> listeRubriques) {
        this.listeRubriques = listeRubriques;
    }

    public RubriqueMetier getRubriqueMetier() {
        return rubriqueMetier;
    }

    public void setRubriqueMetier(RubriqueMetier rubriqueMetier) {
        this.rubriqueMetier = rubriqueMetier;
    }


    public List<Annee> getListeAnnees() {
        return listeAnnees;
    }

    public void setListeAnnees(List<Annee> listeAnnees) {
        this.listeAnnees = listeAnnees;
    }

     public List<Object> getListeBudgets() {
        int a = AnneeBean.submit();
         System.out.println(a);
        listeBudgets = budgetisationMetier.getAllBudgets(a);
        return listeBudgets;
    }

    public void update()
    {
        Budgetisation budget = budgetisationMetier.getBudget(this.id);
    budgetisationMetier.update(budget);
    }
    public void delete()
    {   
        BudgetisationId bu = new BudgetisationId(getBudget().getRubrique().getIdRubrique(),getBudget().getAnnee().getAnnee());
        Budgetisation b = budgetisationMetier.getBudget(bu);
        budgetisationMetier.delete(getBudget().getId());
        listeBudgets.remove(budget);
        budget = null;
    }
    public BudgetisationMetier getBudgetisationMetier() {
        return budgetisationMetier;
    }

    public void setBudgetisationMetier(BudgetisationMetier budgetisationMetier) {
        this.budgetisationMetier = budgetisationMetier;
    }

    public BudgetisationId getId() {
        return id;
    }

    public void setId(BudgetisationId id) {
        this.id = id;
    }

    public Rubrique getRubrique() {
        return rubrique;
    }

    public void setRubrique(Rubrique rubrique) {
        this.rubrique = rubrique;
    }

    public Annee getAnnee() {
        return annee;
    }

    public void setAnnee(Annee annee) {
        this.annee = annee;
    }

    public Double getCreditOuvert() {
        return creditOuvert;
    }

    public void setCreditOuvert(Double creditOuvert) {
        this.creditOuvert = creditOuvert;
    }

    public Double getModification() {
        return modification;
    }

    public void setModification(Double modification) {
        this.modification = modification;
    }

    public Double getCreditReporte() {
        return creditReporte;
    }

    public void setCreditReporte(Double creditReporte) {
        this.creditReporte = creditReporte;
    }

}
包装控制器;
@组成部分
@范围(“视图”)
公共类BudgetisationBean实现java.io.Serializable{
@自动连线
私人预算编制者预算编制者;
@自动连线
私人住宅;
私人预算;
私人名单名单;
私人名单;
私人预算;
私人预算id;
私人鲁布里克鲁布里克;
私人安尼;
私人双信用证;
私人双重修改;
私人双重信用报告;
@施工后
公共void init(){
Listenee=budgetisationMetier.GetListenee();
ListRubriques=budgetisationMetier.getAllRubriquesNonBudgets();
}
公共列表getListRubriques(){
返回列表;
}
公共无效SetListRubriques(列表ListRubriques){
this.listeRubriques=listeRubriques;
}
公共RubriqueMetier getRubriqueMetier(){
返回rubriqueMetier;
}
公共无效设置RubriqueMetier(RubriqueMetier RubriqueMetier){
this.rubriqueMetier=rubriqueMetier;
}
公共列表getListenees(){
回归李斯特尼斯;
}
公共无效集合列表项(列表列表项){
this.listenenes=listenenes;
}
公共列表getListBudgets(){
int a=AnneeBean.submit();
系统输出打印项次(a);
ListBudgets=budgetisationMetier.getAllBudgets(a);
返回预算;
}
公共无效更新()
{
Budgetisation budget=budgetisationMetier.getBudget(this.id);
预算更新(预算);
}
公共作废删除()
{   
BudgetisationId bu=新的BudgetisationId(getBudget().getRubrique().getIdRubrique(),getBudget().getAnnee().getAnnee());
预算化b=预算化Metier.getBudget(bu);
删除(getBudget().getId());
列出预算。删除(预算);
预算=空;
}
公共预算编制者getBudgetisationMetier(){
返回预算表;
}
公共无效设置BudgetisationMetier(BudgetisationMetier BudgetisationMetier){
this.budgetisationMetier=budgetisationMetier;
}
公共预算ID getId(){
返回id;
}
公共作废设置id(BudgetisationId){
this.id=id;
}
公共Rubrique getRubrique(){
返回rubrique;
}
公共无效设置Rubrique(Rubrique Rubrique){
this.rubrique=rubrique;
}
公共Annee getAnnee(){
返回安妮;
}
公共空间塞坦尼(Annee-Annee){
this.annee=annee;
}
公共双getCreditOuvert(){
返回creditOuvert;
}
公共无效设置creditOuvert(双creditOuvert){
this.creditOuvert=creditOuvert;
}
公共双getModification(){
退货修改;
}
公共无效设置修改(双重修改){
这个。修改=修改;
}
公共双getCreditReporte(){
返回信用报告;
}
公共无效setCreditReporte(双重creditReporte){
this.creditReporte=creditReporte;
}
}
这是我的页面截图,这样你就可以理解我在说什么了

你需要一个例子,你能解释一下什么是转换器,我会如何在我的案例中使用它吗?我是JSF新手,我不太了解@kolossus的所有特性
package controller;

@Component
@Scope("view")
public class BudgetisationBean implements java.io.Serializable{

    @Autowired
    private BudgetisationMetier budgetisationMetier;
    @Autowired
    private RubriqueMetier rubriqueMetier;
    private List<Object> listeBudgets;
    private List<Annee> listeAnnees;
    private List<Object> listeRubriques;
    private Budgetisation budget;
    private BudgetisationId id;
    private Rubrique rubrique;
    private Annee annee;
    private Double creditOuvert;
    private Double modification;
    private Double creditReporte;


    @PostConstruct
    public void init() {
        listeAnnees = budgetisationMetier.getListeAnnee();
        listeRubriques = budgetisationMetier.getAllRubriquesNonBudgets();
    }

    public List<Object> getListeRubriques() {
        return listeRubriques;
    }

    public void setListeRubriques(List<Object> listeRubriques) {
        this.listeRubriques = listeRubriques;
    }

    public RubriqueMetier getRubriqueMetier() {
        return rubriqueMetier;
    }

    public void setRubriqueMetier(RubriqueMetier rubriqueMetier) {
        this.rubriqueMetier = rubriqueMetier;
    }


    public List<Annee> getListeAnnees() {
        return listeAnnees;
    }

    public void setListeAnnees(List<Annee> listeAnnees) {
        this.listeAnnees = listeAnnees;
    }

     public List<Object> getListeBudgets() {
        int a = AnneeBean.submit();
         System.out.println(a);
        listeBudgets = budgetisationMetier.getAllBudgets(a);
        return listeBudgets;
    }

    public void update()
    {
        Budgetisation budget = budgetisationMetier.getBudget(this.id);
    budgetisationMetier.update(budget);
    }
    public void delete()
    {   
        BudgetisationId bu = new BudgetisationId(getBudget().getRubrique().getIdRubrique(),getBudget().getAnnee().getAnnee());
        Budgetisation b = budgetisationMetier.getBudget(bu);
        budgetisationMetier.delete(getBudget().getId());
        listeBudgets.remove(budget);
        budget = null;
    }
    public BudgetisationMetier getBudgetisationMetier() {
        return budgetisationMetier;
    }

    public void setBudgetisationMetier(BudgetisationMetier budgetisationMetier) {
        this.budgetisationMetier = budgetisationMetier;
    }

    public BudgetisationId getId() {
        return id;
    }

    public void setId(BudgetisationId id) {
        this.id = id;
    }

    public Rubrique getRubrique() {
        return rubrique;
    }

    public void setRubrique(Rubrique rubrique) {
        this.rubrique = rubrique;
    }

    public Annee getAnnee() {
        return annee;
    }

    public void setAnnee(Annee annee) {
        this.annee = annee;
    }

    public Double getCreditOuvert() {
        return creditOuvert;
    }

    public void setCreditOuvert(Double creditOuvert) {
        this.creditOuvert = creditOuvert;
    }

    public Double getModification() {
        return modification;
    }

    public void setModification(Double modification) {
        this.modification = modification;
    }

    public Double getCreditReporte() {
        return creditReporte;
    }

    public void setCreditReporte(Double creditReporte) {
        this.creditReporte = creditReporte;
    }

}