-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: HibernateException when saving children
PostPosted: Wed Apr 28, 2004 8:25 am 
Regular
Regular

Joined: Wed Apr 21, 2004 10:57 am
Posts: 62
Location: Hasselt, Belgium
I create a parent named Ploeg with PloegRenners as Children.
When saving Ploeg he throws the following exception. I've read the forum to find the same exception, but none of the answers applied to my problem.

I guess I make a mistake somewhere, question is only where?

I only show the relevant methods in the Java files, they also contain methods for finding, updating and deleting. The exception is thrown when the commit is triggered in the BO file.

Output
Code:
13:29:57,937 DEBUG HibernatePloegDAO:? - Create ploeg: Ploeg [id:null-naam:naam-gebruiker:402871fffa5cabef00fa5cabf7630001-punten:null]
13:29:58,250 ERROR SessionImpl:2368 - Could not synchronize database state with session
net.sf.hibernate.HibernateException: Batch update row count wrong: 0
   at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:65)
   at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:122)
   at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2410)
   at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2361)
   at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2229)
   at be.ngb.bo.PloegImpl.createPloeg(PloegImpl.java:41)
   at test.be.ngb.bo.TestPloeg.testCreatePloeg(TestPloeg.java:55)
   at java.lang.reflect.Method.invoke(Native Method)
   at junit.framework.TestCase.runTest(TestCase.java:154)
   at junit.framework.TestCase.runBare(TestCase.java:127)
   at junit.framework.TestResult$1.protect(TestResult.java:106)
   at junit.framework.TestResult.runProtected(TestResult.java:124)
   at junit.framework.TestResult.run(TestResult.java:109)
   at junit.framework.TestCase.run(TestCase.java:118)
   at junit.framework.TestSuite.runTest(TestSuite.java:208)
   at junit.framework.TestSuite.run(TestSuite.java:203)
   at junit.textui.TestRunner.doRun(TestRunner.java:116)
   at com.intellij.rt.execution.junit2.IdeaJUnitAgent.doRun(Unknown Source)
   at junit.textui.TestRunner.start(TestRunner.java:172)
   at com.intellij.rt.execution.junit.TextTestRunner2.startRunnerWithArgs(Unknown Source)
   at com.intellij.rt.execution.junit2.JUnitStarter.prepareStreamsAndStart(Unknown Source)
   at com.intellij.rt.execution.junit2.JUnitStarter.main(Unknown Source)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.intellij.rt.execution.application.AppMain.main(Unknown Source)


Mapping files
Code:
    ...
    <bag
        name="ploegRenners"
        lazy="false"
        cascade="all"
    >
        <key column="PloegId" />
        <one-to-many class="be.ngb.vo.PloegRennerVO" />
    </bag>
    ...


Code:
        ...
        <!-- bi-directional many-to-one association to Ploeg -->
        <many-to-one
            name="ploeg"
            class="be.ngb.vo.PloegVO"
            not-null="true"
        >
            <column name="PloegId" />
        </many-to-one>
        ...


Ploeg - BO layer file
Code:
public void createPloeg(PloegVO ploeg) throws BOException, AlreadyExistsException {
        Transaction t = null;
        try {
            t = getUserSession().beginTransaction();
            //createPloeg
            DAOFactory.getPloegDAO().createPloeg(ploeg);
            //createPloegRenners for ploeg
            //createPloegRenners(ploeg);         //Hibernate should take care of this automatically
            t.commit();
        } catch (AlreadyExistsException e) {
            try {
                t.rollback();
            } catch (Exception ex) {
                Logger.error(this, ex);
            }
            throw e;
        } catch (HibernateException e) {
            Logger.error(this, e);
            throw new BOException("Error tijdens mappen", e);
        } catch (Exception e) {
            try {
                t.rollback();
            } catch (Exception ex) {
                Logger.error(this, ex);
            }
            throw new BOException("Error tijdens het aanmaken van ploeg", e);
        }
    }


PloegDAO
Code:
public void createPloeg(PloegVO ploeg) throws DAOException, AlreadyExistsException {
        // Fire up Hibernate
        Logger.debug(this, "Create ploeg: " + ploeg);
        try {
            PloegImpl.getUserSession().save(ploeg);
        } catch (HibernateException e) {
            Logger.error(this, e);
            throw new DAOException("Hibernate Exception found in createPloeg", e);
        }
    }

and to end with
My POJO's

PloegVO.java
Code:
package be.ngb.vo;

import java.util.ArrayList;
import java.util.List;

public class PloegVO extends AbstractVO {

    public static final String GEEN_PUNTEN = "**";

    private String naam;
    private GebruikerVO gebruiker;
    private Integer punten;

    private List ploegRenners;
    private List ploegRennersPeriode1;
    private List ploegRennersPeriode2;
    private List ploegRennersPeriode1en2;
    private List ploegRennersPeriode1of2;
    private List ploegRennersIn;
    private List ploegRennersOut;

    private List ploegRennerUitslagen;

    public PloegVO() {
    }

    public PloegVO(String id) {
        this.id = id;
    }

    public PloegVO(String id, String naam) {
        this.id = id;
        this.naam = naam;
    }

    public PloegVO(String id, String naam, GebruikerVO gebruiker) {
        this.id = id;
        this.naam = naam;
        this.gebruiker = gebruiker;
    }

    public PloegVO(String id, String naam, GebruikerVO gebruiker, Integer punten) {
        this(id, naam, gebruiker);
        this.punten = punten;
    }

    public PloegVO(String id, String naam, String gebruikerId) {
        this.id = id;
        this.naam = naam;
        this.gebruiker = new GebruikerVO(gebruikerId);
    }

    public PloegVO(String id, String naam, String gebruikerId, Integer punten) {
        this(id, naam, gebruikerId);
        this.punten = punten;
    }

    public String getNaam() {
        return naam;
    }

    public void setNaam(String naam) {
        this.naam = naam;
    }

    public GebruikerVO getGebruiker() {
        return gebruiker;
    }

    public void setGebruiker(GebruikerVO gebruiker) {
        this.gebruiker = gebruiker;
    }

    public List getPloegRenners() {
        return ploegRenners;
    }

    public void setPloegRenners(List ploegRenners) {
        this.ploegRenners = ploegRenners;

        ploegRennersPeriode1 = new ArrayList();
        ploegRennersPeriode2 = new ArrayList();
        for (int i = 0; i < getPloegRenners().size(); i++) {
            PloegRennerVO ploegRenner = (PloegRennerVO) getPloegRenners().get(i);
            if ("1".equals(ploegRenner.getPeriode().getId())) {
                ploegRennersPeriode1.add(ploegRenner);
            } else if ("2".equals(ploegRenner.getPeriode().getId())) {
                ploegRennersPeriode2.add(ploegRenner);
            }
        }
        ploegRennersOut = new ArrayList();
        ploegRennersIn = new ArrayList();
        ploegRennersPeriode1of2 = new ArrayList();
        ploegRennersPeriode1en2 = new ArrayList();
        for (int i = 0; i < getPloegRenners().size(); i++) {
            PloegRennerVO ploegRenner = (PloegRennerVO) getPloegRenners().get(i);
            boolean periode1 = containsPloegRenner(ploegRennersPeriode1, ploegRenner);
            boolean periode2 = containsPloegRenner(ploegRennersPeriode2, ploegRenner);

            if (!containsPloegRenner(ploegRennersPeriode1of2, ploegRenner)) {
                ploegRennersPeriode1of2.add(ploegRenner);
            }
            if (periode1 && !periode2) {
                ploegRennersOut.add(ploegRenner);
            } else if (periode2 && !periode1) {
                ploegRennersIn.add(ploegRenner);
            } else if (periode1 && periode2) {
                if (!containsPloegRenner(ploegRennersPeriode1en2, ploegRenner)) {
                    ploegRennersPeriode1en2.add(ploegRenner);
                }
            }
        }
    }

    public List getPloegRennersPeriode1() {
        return ploegRennersPeriode1;
    }

    public List getPloegRennersPeriode2() {
        return ploegRennersPeriode2;
    }

    public List getPloegRennersPeriode1en2() {
        return ploegRennersPeriode1en2;
    }

    public List getPloegRennersPeriode1of2() {
        return ploegRennersPeriode1of2;
    }

    public List getPloegRennersIn() {
        return ploegRennersIn;
    }

    public List getPloegRennersOut() {
        return ploegRennersOut;
    }

    public List getRennersPeriode1() {
        List renners = new ArrayList();
        if (ploegRennersPeriode1 != null) {
            for (int i = 0; i < ploegRennersPeriode1.size(); i++) {
                PloegRennerVO ploegRenner = (PloegRennerVO) ploegRennersPeriode1.get(i);
                renners.add(ploegRenner.getRenner());
            }
        }
        return renners;
    }

    public List getRennersPeriode2() {
        List renners = new ArrayList();
        if (ploegRennersPeriode2 != null) {
            for (int i = 0; i < ploegRennersPeriode2.size(); i++) {
                PloegRennerVO ploegRenner = (PloegRennerVO) ploegRennersPeriode2.get(i);
                renners.add(ploegRenner.getRenner());
            }
        }
        return renners;
    }

    public List getRennersPeriode1en2() {
        List renners = new ArrayList();
        if (ploegRennersPeriode1en2 != null) {
            for (int i = 0; i < ploegRennersPeriode1en2.size(); i++) {
                PloegRennerVO ploegRenner = (PloegRennerVO) ploegRennersPeriode1en2.get(i);
                renners.add(ploegRenner.getRenner());
            }
        }
        return renners;
    }

    public List getRennersPeriode1of2() {
        List renners = new ArrayList();
        if (ploegRennersPeriode1of2 != null) {
            for (int i = 0; i < ploegRennersPeriode1of2.size(); i++) {
                PloegRennerVO ploegRenner = (PloegRennerVO) ploegRennersPeriode1of2.get(i);
                renners.add(ploegRenner.getRenner());
            }
        }
        return renners;
    }

    public List getRennersIn() {
        List renners = new ArrayList();
        if (ploegRennersIn != null) {
            for (int i = 0; i < ploegRennersIn.size(); i++) {
                PloegRennerVO ploegRenner = (PloegRennerVO) ploegRennersIn.get(i);
                renners.add(ploegRenner.getRenner());
            }
        }
        return renners;
    }

    public List getRennersOut() {
        List renners = new ArrayList();
        if (ploegRennersOut != null) {
            for (int i = 0; i < ploegRennersOut.size(); i++) {
                PloegRennerVO ploegRenner = (PloegRennerVO) ploegRennersOut.get(i);
                renners.add(ploegRenner.getRenner());
            }
        }
        return renners;
    }

    public Integer getPunten() {
        return punten;
    }

    public void setPunten(Integer punten) {
        this.punten = punten;
    }

    public List getPloegRennerUitslagen() {
        return ploegRennerUitslagen;
    }

    public void setPloegRennerUitslagen(List ploegRennerUitslagen) {
        this.ploegRennerUitslagen = ploegRennerUitslagen;

        // Punten
        if (ploegRennerUitslagen != null) {
            int punten = 0;
            for (int j = 0; j < ploegRennerUitslagen.size(); j++) {
                PloegRennerUitslagVO ploegRennerUitslag = (PloegRennerUitslagVO) ploegRennerUitslagen.get(j);
                if (ploegRennerUitslag != null) {
                    if (ploegRennerUitslag.getUitslag() != null && ploegRennerUitslag.getUitslag().getPunten() != null) {
                        punten += ploegRennerUitslag.getUitslag().getPunten().intValue();
                    }
                }
            }
            setPunten(new Integer(punten));
        }
    }

    public String getWedstrijdPunten(WedstrijdVO wedstrijd) {
        int result = 0;
        if (wedstrijd != null && wedstrijd.getId() != null) {
            if ("1".equals(wedstrijd.getId())) {
                return GEEN_PUNTEN;
            }
            if (ploegRennerUitslagen != null) {
                for (int i = 0; i < ploegRennerUitslagen.size(); i++) {
                    PloegRennerUitslagVO ploegRennerUitslag = (PloegRennerUitslagVO) ploegRennerUitslagen.get(i);
                    if (wedstrijd.getId().equals(ploegRennerUitslag.getUitslag().getWedstrijd().getId())) {
                        result += ploegRennerUitslag.getUitslag().getPunten().intValue();
                    }
                } // end for
            }
        } // end if wedstrijd
        return "" + result;
    }

    public String getRennerPunten(RennerVO renner) {
        if (!containsPloegRenner(ploegRennersPeriode1of2, renner)) {
            return GEEN_PUNTEN;
        }
        int result = 0;
        if (renner != null && renner.getId() != null && ploegRennerUitslagen != null) {
            for (int i = 0; i < ploegRennerUitslagen.size(); i++) {
                PloegRennerUitslagVO ploegRennerUitslag = (PloegRennerUitslagVO) ploegRennerUitslagen.get(i);
                if (renner.getId().equals(ploegRennerUitslag.getUitslag().getRenner().getId())) {
                    result += ploegRennerUitslag.getUitslag().getPunten().intValue();
                }
            } // end for
        } // end if
        return "" + result;
    }

    public String getRennerWedstrijdPunten(RennerVO renner, WedstrijdVO wedstrijd) {
        int result = 0;
        if (renner != null && renner.getId() != null && wedstrijd != null) {
            if ("1".equals(wedstrijd.getId())) {
                return GEEN_PUNTEN;
            }

            if (wedstrijd.getPeriode() != null) {
                if ("1".equals(wedstrijd.getPeriode().getId())) {
                    if (!containsPloegRenner(ploegRennersPeriode1, renner)) {
                        return GEEN_PUNTEN;
                    }
                } else if ("2".equals(wedstrijd.getPeriode().getId())) {
                    if (!containsPloegRenner(ploegRennersPeriode2, renner)) {
                        return GEEN_PUNTEN;
                    }
                }
            } // end if periode != null
            if (wedstrijd.getId() != null && ploegRennerUitslagen != null) {
                for (int i = 0; i < ploegRennerUitslagen.size(); i++) {
                    PloegRennerUitslagVO ploegRennerUitslag = (PloegRennerUitslagVO) ploegRennerUitslagen.get(i);
                    UitslagVO uitslag = ploegRennerUitslag.getUitslag();
                    RennerVO rvo = uitslag.getRenner();
                    WedstrijdVO wvo = uitslag.getWedstrijd();
                    if (renner.getId().equals(rvo.getId()) && wedstrijd.getId().equals(wvo.getId())) {
                        result = ploegRennerUitslag.getUitslag().getPunten().intValue();
                    }
                } // end for
            }
        } // end if renner & wedstrijd
        return "" + result;
    }

    public String toString() {
        StringBuffer buffer = new StringBuffer();
        buffer.append("Ploeg [");
        buffer.append("id:" + id + "-");
        buffer.append("naam:" + naam + "-");
        buffer.append("gebruiker:" + (gebruiker == null ? "" : gebruiker.getId()) + "-");
        buffer.append("punten:" + punten);
        buffer.append("]");
        return buffer.toString();
    }

    // PRIVATE METHODS
    public static boolean containsPloegRenner(List ploegRenners, PloegRennerVO pr) {
        if (ploegRenners == null || pr == null) {
            return false;
        }
        return containsPloegRenner(ploegRenners, pr.getRenner());
    }

    public static boolean containsPloegRenner(List ploegRenners, RennerVO renner) {
        if (ploegRenners == null || renner == null) {
            return false;
        }
        for (int i = 0; i < ploegRenners.size(); i++) {
            PloegRennerVO ploegRenner = (PloegRennerVO) ploegRenners.get(i);
            if (ploegRenner.getRenner() == null) {
                return false;
            }
            if (ploegRenner.getRenner().getId().equals(renner.getId())) {
                return true;
            }
        } // end for
        return false;
    }
}


PloegRennerVO.java
Code:
package be.ngb.vo;

public class PloegRennerVO extends AbstractVO {

    protected PloegVO ploeg;
    protected RennerVO renner;
    protected PeriodeVO periode;
    protected Integer punten;

    public PloegRennerVO(){}

    public PloegRennerVO(String id, PloegVO ploeg, RennerVO renner) {
        this.id = id;
        this.ploeg = ploeg;
        this.renner = renner;
    }

    public PloegRennerVO(String id, PloegVO ploeg, RennerVO renner, PeriodeVO periode) {
        this.id = id;
        this.ploeg = ploeg;
        this.renner = renner;
        this.periode = periode;
    }

    public PloegRennerVO(String id, String ploegId, String rennerId, String periodeId) {
        this.id = id;
        this.ploeg = new PloegVO(ploegId);
        this.renner = new RennerVO(rennerId);
        this.periode = new PeriodeVO(periodeId);
    }

    public PloegVO getPloeg() {
        return ploeg;
    }

    public void setPloeg(PloegVO ploeg) {
        this.ploeg = ploeg;
    }

    public RennerVO getRenner() {
        return renner;
    }

    public void setRenner(RennerVO renner) {
        this.renner = renner;
    }

    public PeriodeVO getPeriode() {
        return periode;
    }

    public void setPeriode(PeriodeVO periode) {
        this.periode = periode;
    }

    public Integer getPunten() {
        return punten;
    }

    public void setPunten(Integer punten) {
        this.punten = punten;
    }

    public String toString() {
        StringBuffer buffer = new StringBuffer();
        buffer.append("PloegRenner [");
        buffer.append("id:" + id + "-");
        buffer.append("ploeg:" + (ploeg == null ? "" : ploeg.getId()) + "-");
        buffer.append("renner:" + (renner == null ? "" : renner.getId()) + "-");
        buffer.append("periode:" + (periode == null ? "" : periode.getId()) + "-");
        buffer.append("punten:" + punten);
        buffer.append("]");
        return buffer.toString();
    }

}


Top
 Profile  
 
 Post subject:
PostPosted: Fri Apr 30, 2004 12:41 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Are you using SQLServer ?

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 03, 2004 2:45 am 
Regular
Regular

Joined: Wed Apr 21, 2004 10:57 am
Posts: 62
Location: Hasselt, Belgium
No, I'm currently using MySQL 4.0.18.


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 05, 2004 3:24 am 
Regular
Regular

Joined: Wed Apr 21, 2004 10:57 am
Posts: 62
Location: Hasselt, Belgium
Mmm, I'm still not able to save those child objects automatically. Is this a problem in MySQL 4.0.18?
I just continued in my project with the explicit save of the child objects, but in the end it shouldn't be there, not?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.