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 filesCode:
...
<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 fileCode:
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);
}
}
PloegDAOCode:
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'sPloegVO.javaCode:
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.javaCode:
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();
}
}