hibernate hashCide a equals
Ivan Polak
ivan.polak na f4s.sk
Pondělí Březen 8 08:46:25 CET 2010
dakujem vsetkym za namety a pripomienky.
Ivan
2010/3/4 Lukas Barton <lukas na cnawr.cz>
> Asi nikdy neporovnavate objekty vytvorene pres konstruktor a ziskane napr.
> pomoci session.load.
>
> Zkuste napr. nasledujici kod:
>
>
> Session session=HibernateUtil.getSessionFactory().openSession();
>
> session.beginTransaction();
>
>
> Event theEvent1 = new Event();
> theEvent1.setTitle("Test title");
> theEvent1.setDate(new Date());
>
>
> Serializable eventId=session.save(theEvent1);
>
> session.getTransaction().commit();
> session.close();
>
>
> session=HibernateUtil.getSessionFactory().openSession();
>
> session.beginTransaction();
>
> Event theEvent2 = (Event) session.load(Event.class,eventId);
>
>
> System.out.println(EqualsBuilder.reflectionEquals(theEvent1,
> theEvent2)); // false
>
> session.getTransaction().commit();
> session.close();
>
>
> EqualsBuilder se pokusi porovnat vsechny fieldy na te proxy, tj. v mem
> pripade:
>
> [public static javassist.util.proxy.MethodHandler
> org.hibernate.tutorial.domain.Event_$$_javassist_0.default_interceptor,
> private javassist.util.proxy.MethodHandler
> org.hibernate.tutorial.domain.Event_$$_javassist_0.handler, public static
> javassist.util.proxy.MethodFilter
> org.hibernate.tutorial.domain.Event_$$_javassist_0._method_filter, private
> static java.lang.reflect.Method[]
> org.hibernate.tutorial.domain.Event_$$_javassist_0._methods_]
>
> Coz samozrejme pres new vytvoreny Event nema a vrati tedy false.
>
>
> Stejne tak to nebude chodit, kdyz budete mit IDcko instance assigned
> HIbernatem, ale zaroven budete mit business key slozenych z nejakych
> poli....
>
> Jeden z moznych postupu je pouzit instaceOf a az pak EqualsBuilder - staci
> na primarni klic.
>
> Vice info viz treba: https://www.hibernate.org/109.html a
> http://www.jroller.com/sjivan/entry/intellij_generated_equals_breaks_hibernate
>
>
> Lukas
>
> 2010/3/4 Rastislav Siekel <siekel na prosoft.sk>
>
> Vyzerá to, že máte pravdu :-(
>>
>> Tak ten komentár že sa to "prekastuje na spoločného predka" odvolávam.
>> Ale že to s Hibernate chodí, je stále pravda :-)
>>
>> Rastislav "Bedo" Siekel
>>
>>
>> -------- Original Message -------- Subject: Re: hibernate hashCide a
>> equals Date: Thu, 4 Mar 2010 10:23:45 +0100 From: Zdenek Tronicek
>> <tronicek na fit.cvut.cz> <tronicek na fit.cvut.cz> Reply-To: Java
>> <konference na java.cz> <konference na java.cz> To: Java <konference na java.cz><konference na java.cz>
>>
>>
>> Takze kdyz lhs je Object a rhs je String, tak lhsClass bude Object.class a
>> rhsClass bude String.class.
>> lhsClass.isInstance(rhs) vrati true (tedy testClass = Object.class) a
>> !rhsClass.isInstance(lhs) je take true, tedy testClass = String.class.
>>
>> To nejak neodpovida tomu, ze se "to prekastuje na spoločného predka".
>>
>> Z.T.
>> --
>> Zdenek Tronicek
>> FIT CTU in Prague
>>
>>
>> Rastislav Siekel napsal(a):
>> > Veď preto tam ten Commons-Lang dáva takéto niečo:
>> >
>> > ...
>> > Class lhsClass = lhs.getClass();
>> > Class rhsClass = rhs.getClass();
>> > Class testClass;
>> > if (lhsClass.isInstance(rhs)) {
>> > testClass = lhsClass;
>> > if (!rhsClass.isInstance(lhs)) {
>> > // rhsClass is a subclass of lhsClass
>> > testClass = rhsClass;
>> > }
>> > } else if (rhsClass.isInstance(lhs)) {
>> > testClass = rhsClass;
>> > if (!lhsClass.isInstance(rhs)) {
>> > // lhsClass is a subclass of rhsClass
>> > testClass = lhsClass;
>> > }
>> > } else {
>> > // The two classes are not related.
>> > return false;
>> > }
>> > ...
>> >
>> > Čiže si to prekastuje na spoločného predka a až potom porovnáva.
>> > Pravdupovediac som to moc neštudoval, po otestovaní s Hiberanate som
>> > zistil, že všetko beží ako má a odvtedy to "len" používam :-)
>> >
>> > R.
>> >
>> > ------------------------------------------------------------------------
>> > Ing. Rastislav Siekel
>> > Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
>> > E-mail : <siekel na prosoft.sk> <siekel na prosoft.sk> <mailto:siekel na prosoft.sk> <siekel na prosoft.sk>
>> > Tel : 041/562 54 91
>> > Fax : 041/562 54 97
>> > Mobil : 0905 34 00 20
>> >
>> > On 4. 3. 2010 9:43, Lukas Barton wrote:
>> >> Jenom pozor, ze je v equals metode nutne pouzivat instanceof misto
>> >> getClass()==.
>> >> Hibernate tam totiz dava proxy a pak by to nefungovalo.
>> >>
>> >> Lukas
>> >>
>> >> Rastislav Siekel wrote:
>> >>> Jakrta Commons-Lang a zatiaľ ma nesklamali.
>> >>>
>> >>> Rastislav "Bedo" Siekel
>> >>>
>> >>> ------------------------------------------------------------------------
>> >>> Ing. Rastislav Siekel
>> >>> Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
>> >>> E-mail : <siekel na prosoft.sk> <siekel na prosoft.sk> <mailto:siekel na prosoft.sk> <siekel na prosoft.sk>
>> >>> Tel : 041/562 54 91
>> >>> Fax : 041/562 54 97
>> >>> Mobil : 0905 34 00 20
>> >>>
>> >>> On 4. 3. 2010 6:54, Daniel Holešínský wrote:
>> >>>> Zdravim,
>> >>>>
>> >>>> pouzivam generator IDE (eclipse, idea). U Hibernate si ale musite
>> >>>> dat pozor na kolekce s atributem lazy - mimo session se jinak
>> >>>> potkate s vyjimkou
>> >>>>
>> >>>> org.hibernate.LazyInitializationException: failed to lazily
>> >>>> initialize a collection of role: ____, no session or session was
>> >>>> closed
>> >>>>
>> >>>> z pri jakemkoliv pouziti eaual a hashCode (za predpokladu, ze tato
>> >>>> kolekce je zahrnuta do vypoctu hashCode a vyhodnoceni equals)
>> >>>>
>> >>>> DH
>> >>>>
>> >>>> 2010/3/3 Ivan Polak <ivan.polak na f4s.sk <mailto:ivan.polak na f4s.sk> <ivan.polak na f4s.sk>>
>> >>>>
>> >>>> Ahojte,
>> >>>>
>> >>>> mam otazku, co pouzivate na generovanie tychto 2 metod pre domain
>> >>>> objecty v hibernate ? eclipse generovanie (Source/Generate
>> >>>> hashCode()
>> >>>> and equals() alebo pouzitie EqualsBuilder a HashCodeBuilder z
>> >>>> projektu
>> >>>> Jakarta Commons-Lang (http://
>> >>>> commons.apache.org/lang/ <http://commons.apache.org/lang/> <http://commons.apache.org/lang/> alebo
>> >>>> nieco ine?
>> >>>>
>> >>>> dakujem
>> >>>>
>> >>>> Ivan
>> >>>>
>> >>>>
>> >>
>> >
>>
>>
>>
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://amaio.cz/pipermail/konference/attachments/20100308/eae0782e/attachment.htm>
Další informace o konferenci Konference