[Java + Hibernate] UnresolvableObjectException

Pagina: 1
Acties:

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Probleempje met Java en Hibernate...

Situatie:
code:
1
2
3
Tabel wedstrijd(id, scheidsrechterid)
Tabel persoon(id, ploegid, naam, type(speler/scheidsrechter))
Tabel ploeg(id, naam)


In Hibernate is, voor persoon, de ploegid gemapped op ploeg.id, als volgt:
code:
1
<many-to-one name="ploeg" column="ploegid" class="model.Ploeg"/>


Probleem: bij een persoon van het type 'scheidsrechter' is er geen relatie tussen ploegid en ploeg.id. Hibernate spuwt een UnresolvableObjectException uit (klopt, er is inderdaad geen ploeg met id "0" bij scheidsrechters)

Is het mogelijk om in Hibernate deze many-to-one optioneel te maken op een of andere manier? Of denk ik beter aan een andere manier van implementeren in het datamodel?

  • momania
  • Registratie: Mei 2000
  • Nu online

momania

iPhone 30! Bam!

Je kan volgens mij in je many-to-one de volgende parameter vullen: outer-join="auto"

Dan zou je als Ploeg bij de scheidsrechter gewoon null moeten krijgen denk ik.

Maar misschien is het idd verstandiger om je persoon tabel op te splitsen naar spelers en scheidsrechters :)

Neem je whisky mee, is het te weinig... *zucht*


  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Thnx ! Die had ik al geprobeerd, maar als in je DB alles met 0 (nul) zit i.p.v. null is het nogal lastig ;)

Verwijderd

extend speler van scheidsrechter en hang de ploeg gewoon aan de speler, en een scheidsrechter heeft geen ploeg, of in de scheidsrechterimplementatie keer je null terug...

tenslotte zeg je het zelf, een scheidsrechter heeft geen ploeg...dus is het een ander object. Je kan steeds een discriminator value gebruiken (scheidsrechterFlag) zodat hibernate weet of het een scheidsrechter of een voetballer is (ook als die geen ploeg heeft)

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Ondertussen is het gelukt door null terug te geven, maar heb weer een nieuw probleem :-)

De ploeg bevat een set van spelers (leve OO), en wil die ook meteen via hibernate mappen.
Hiervoor gebruik ik een <set>, ook met de outer-join. Probleem is dat hij op de outer join vastloopt. Laat ik de outer join eruit, dan heb ik geen data.

Na wat zoeken vond ik dit: http://opensource.atlassi...s/xdoclet/browse/XDT-1101
Maar dit leek me niet meer van toepassing in versie 2.0...

Code post ik morgen wel als ik weer aan het werk ben, heb hem hier niet bij de hand.

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Heb de code nu wel bij de hand. De relatie many-to-one uit de eerste post komt terug in Ploeg, maar omgekeerd, in een collection:
code:
1
2
3
4
5
6
7
        <class name="model.Ploeg" table="ploeg">
                ............
                <set name="spelers" cascade="all">
                    <key column="ploegid"/>
                    <one-to-many class="model.Persoon"/>
                </set>
        </class>


De foutmelding:
code:
1
2
3
4
5
6
7
8
20-dec-2004 11:31:49 net.sf.hibernate.LazyInitializationException <init>
SEVERE: cannot access loading collection
net.sf.hibernate.LazyInitializationException: cannot access loading collection
    at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:191)
    at net.sf.hibernate.collection.PersistentCollection.read(PersistentCollection.java:71)
    at net.sf.hibernate.collection.Set.hashCode(Set.java:383)
    at model.Ploeg.hashCode(Ploeg.java:72)
    ..........

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Ok opgelost, blijkbaar een conflict in toegang tot de Set "spelers" binnen ploeg binnen de functie hashCode()
Pagina: 1