-->
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.  [ 6 posts ] 
Author Message
 Post subject: IllegalArgumentException occurred calling getter of
PostPosted: Thu Feb 19, 2004 9:41 am 
Newbie

Joined: Thu Feb 19, 2004 9:19 am
Posts: 3
Hello. I'm having problems when converting my application from castor to hibernate.

I have traced the error to java.reflect.Method.invoke in net.sf.hibernate.property.BasicPropertyAccessor$BasicGetter

The JDK API docs tells me something about the original error but I can't understant a bit :(
The Method class API document page is here:
[url]http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html#invoke(java.lang.Object,%20java.lang.Object[])[/url]

Hibernate version: Hibernate 2.1.1
Database is PostgreSQL 7.2.1

The mapping file (not all of it, I removed some of non relevant parts)
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping
        auto-import="true"
        default-cascade="save-update"
        package="org.assembly.elaine.types">

        <class
                name="org.assembly.elaine.types.Stream"
                table="stream"
                dynamic-update="true"
                select-before-update="true"
                optimistic-lock="version">

                <id
                        name="id"
                        column="id"
                        type="integer">
                        <generator class="sequence">
                                <param name="sequence">program_type_id_seq</param>
                        </generator>
                </id>

                <version
                        name="stamp"
                        column="stamp"
                        type="timestamp"/>

                <many-to-one
                        name="title"
                        column="title"
                        cascade="all"
                        class="org.assembly.elaine.types.Language"/>


                <property
                        name="begins"
                        type="timestamp"
                        column="begins" />

                <property
                        name="ends"
                        type="timestamp"
                        column="ends" />

                <many-to-one
                        name="state"
                        column="state"
                        cascade="none"
                        class="org.assembly.elaine.types.StreamState"/>

                <property
                        name="uniqueId"
                        column="unique_id"
                        type="string"/>

        </class>

        <class
                name="org.assembly.elaine.types.Language"
                table="language"
                dynamic-update="true"
                select-before-update="true"
                optimistic-lock="version">
                <id
                        name="id"
                        column="id"
                        type="integer">
                        <generator class="sequence">
                                <param name="sequence">language_id_seq</param>
                        </generator>
                </id>

                <version
                        name="stamp"
                        column="stamp"
                        type="timestamp"/>
                <property
                        name="name"
                        column="name"
                        type="string"/>
                <property
                        name="abbreviation"
                        column="abbreviation"
                        type="string"/>
        </class>


        <class
                name="org.assembly.elaine.types.MessageData"
                table="message_data"
                dynamic-update="true"
                select-before-update="true"
                optimistic-lock="version">
                <id
                        name="id"
                        column="id"
                        type="integer">
                        <generator class="sequence">
                                <param name="sequence">message_data_id_seq</param>
                        </generator>
                </id>
                <version
                        name="stamp"
                        column="stamp"
                        type="timestamp"/>

                <property
                        name="content"
                        column="content"
                        type="string"/>

                <many-to-one
                        name="language"
                        column="language"
                        cascade="none"
                        class="org.assembly.elaine.types.Language" />

                <property
                        name="uniqueId"
                        column="unique_id"
                        type="string"/>

                <many-to-one
                        name="message"
                        column="message"
                        class="org.assembly.elaine.types.Message"
                        not-null="true"/>

        </class>


</hibernate-mapping>



The Language class:
Code:
public class Language
    implements Serializable {

    private Integer id;

    private String name;

    private String abbreviation;

    private Date stamp;

    public Language() {
        Language.setDefaultValues(this);
    }

    public Language(org.assembly.elaine.binding.Language o) {
        Language.setDefaultValues(this);
        try {
            PropertyUtils.copyProperties(this, o);
        } catch(Exception e) { }
    }

    /** full constructor */
    public Language(String name, String abbreviation, Date stamp) {
        this.id = null;
        this.name = name;
        this.abbreviation = abbreviation;
        this.stamp = stamp;
    }

    public Integer getId() {
        return this.id;
    }

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

     ... get/set methods for name, abbreviation and stamp

     public String toString() {
        return new ToStringBuilder(this)
            .append("id", getId())
            .append("abbreviation", getAbbreviation())
            .toString();
    }

    public boolean equals(Object other) {
        if ( !(other instanceof Language) ) return false;
        Language castOther = (Language) other;
        return new EqualsBuilder()
            .append(this.getId(), castOther.getId())
            .isEquals();
    }

    public int hashCode() {
        return new HashCodeBuilder()
            .append(getId())
            .toHashCode();
    }

    public static Language getInstance() {
        Language r = new Language();

        return r;
    }

    public static Language getInstance(org.assembly.elaine.binding.Language o) {
        Language r = new Language(o);

        return r;
    }

    public static void setDefaultValues(Language o) {
        o.id = null;
        o.setStamp(new Date());

    }

   




Main java code:

Code:
                s = factory.openSession();
                try {

                        // THIS WORKS. The language instance was fetched
                        // in previous session
                        tx = s.beginTransaction();
                        Message m = new Message();
                        //                      m.setUniqueId("X");
                        MessageData md = new MessageData();
                        md.setContent("FOOFOO");
                        md.setLanguage(l);
                        md.setMessage(m);
                        m.addMessageData(md);
                        s.saveOrUpdate(m);
                        tx.commit();

                        // This transaction fails due to the error
                        tx = s.beginTransaction();

                        l = (Language)s.get(Language.class, new Integer(1));

                        Stream stream = new Stream();
                        query = s.createQuery("FROM StreamState WHERE name = ?");
                        query.setString(0, "testing");
                        List res = query.list();

                        StreamState ss = (StreamState) res.get(0);
                        md = MessageData.getInstance(l, "Sreaaami");
                        Message streamTitle = Message.getInstance();
                        streamTitle.addMessageData(md);


                        stream.setTitle(md);
                        stream.setState(ss);

                        s.saveOrUpdate(stream);

                        tx.commit();

                } catch (Exception e) {
                        if (tx != null) {
                                tx.rollback();
                        }
                        throw e;
                } finally {
                        s.close();
                }


Copy of log:
Code:
     [java] 2004-02-19 15:19:56,489 DEBUG Cascades.java:524: cascading to collection: org.assembly.elaine.types.Message.messageData
     [java] 2004-02-19 15:19:56,491 DEBUG Cascades.java:113: cascading to saveOrUpdate()
     [java] 2004-02-19 15:19:56,494 DEBUG SessionImpl.java:1306: saveOrUpdate() persistent instance
     [java] 2004-02-19 15:19:56,497 DEBUG Cascades.java:506: done processing cascades for: org.assembly.elaine.types.Message
     [java] 2004-02-19 15:19:56,499 DEBUG Cascades.java:497: processing cascades for: org.assembly.elaine.types.MessageData
     [java] 2004-02-19 15:19:56,512 DEBUG Cascades.java:113: cascading to saveOrUpdate()
     [java] 2004-02-19 15:19:56,515 DEBUG SessionImpl.java:1306: saveOrUpdate() persistent instance
     [java] 2004-02-19 15:19:56,517 DEBUG Cascades.java:506: done processing cascades for: org.assembly.elaine.types.MessageData
     [java] 2004-02-19 15:19:56,745 DEBUG Cascades.java:497: processing cascades for: org.assembly.elaine.types.Language
     [java] 2004-02-19 15:19:56,759 DEBUG Cascades.java:506: done processing cascades for: org.assembly.elaine.types.Language
     [java] 2004-02-19 15:19:56,761 DEBUG Cascades.java:497: processing cascades for: org.assembly.elaine.types.StreamState
     [java] Exception in thread "main" net.sf.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of org.assembly.elaine.types.Language.id
     [java]     at net.sf.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:110)
     [java] 2004-02-19 15:19:56,765 DEBUG Cascades.java:506: done processing cascades for: org.assembly.elaine.types.StreamState
     [java]     at net.sf.hibernate.persister.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:310)
     [java] 2004-02-19 15:19:56,767 DEBUG Cascades.java:497: processing cascades for: org.assembly.elaine.types.Message
     [java]     at net.sf.hibernate.proxy.HibernateProxyHelper.getIdentifier(HibernateProxyHelper.java:50)
     [java]     at net.sf.hibernate.type.EntityType.toString(EntityType.java:84)
     [java] 2004-02-19 15:19:56,769 DEBUG Cascades.java:524: cascading to collection: org.assembly.elaine.types.Message.messageData
     [java] 2004-02-19 15:19:56,772 DEBUG Cascades.java:113: cascading to saveOrUpdate()
     [java]     at net.sf.hibernate.impl.Printer.toString(Printer.java:49)
     [java]     at net.sf.hibernate.impl.Printer.toString(Printer.java:82)
     [java] 2004-02-19 15:19:56,774 DEBUG SessionImpl.java:1306: saveOrUpdate() persistent instance
     [java]     at net.sf.hibernate.impl.SessionImpl.flushEverything(SessionImpl.java:2228)
     [java]     at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2186)
     [java] 2004-02-19 15:19:56,776 DEBUG Cascades.java:506: done processing cascades for: org.assembly.elaine.types.Message
     [java]     at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
     [java] 2004-02-19 15:19:56,779 DEBUG Cascades.java:497: processing cascades for: org.assembly.elaine.types.MessageData
     [java] 2004-02-19 15:19:56,788 DEBUG Cascades.java:113: cascading to saveOrUpdate()
     [java]     at org.assembly.elaine.test.HibernateTest.main(HibernateTest.java:129)
     [java] Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@1bde4
     [java] 2004-02-19 15:19:56,791 DEBUG SessionImpl.java:1306: saveOrUpdate() persistent instance
     [java]     at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
     [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     [java] 2004-02-19 15:19:56,793 DEBUG Cascades.java:506: done processing cascades for: org.assembly.elaine.types.MessageData
     [java]     at java.lang.reflect.Method.invoke(Method.java:324)
     [java] 2004-02-19 15:19:56,795 DEBUG Cascades.java:497: processing cascades for: org.assembly.elaine.types.Stream
     [java] 2004-02-19 15:19:56,797 DEBUG Cascades.java:113: cascading to saveOrUpdate()
     [java]     at net.sf.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:96)
     [java]     ... 9 more
     [java] 2004-02-19 15:19:56,800 DEBUG SessionImpl.java:1306: saveOrUpdate() persistent instance
     [java] 2004-02-19 15:19:56,802 DEBUG Cascades.java:506: done processing cascades for: org.assembly.elaine.types.Stream
     [java] 2004-02-19 15:19:56,806 DEBUG SessionImpl.java:2321: Flushing entities and processing referenced collections
     [java] 2004-02-19 15:19:56,809 DEBUG SessionImpl.java:2768: Collection found: [org.assembly.elaine.types.Message.messageData#68], was: [org.assembly.elaine.types.Message.messageData#68]
     [java] 2004-02-19 15:19:57,085 DEBUG WrapVisitor.java:76: Wrapped collection in role: org.assembly.elaine.types.Message.messageData
     [java] 2004-02-19 15:19:57,092 DEBUG AbstractEntityPersister.java:278: org.assembly.elaine.types.Message.messageData is dirty


Please help. I have also tried to convert the get/set methods to use bare int and not Integer but it didn't help.
Changing getId -method to return (Integer) null makes hibernate throw error that the Id value has been altered.

- jtm


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 19, 2004 12:17 pm 
Hibernate Team
Hibernate Team

Joined: Tue Sep 09, 2003 2:10 pm
Posts: 3246
Location: Passau, Germany
Have you tried using type="java.lang.Integer"?


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 20, 2004 1:28 am 
Newbie

Joined: Thu Feb 19, 2004 9:19 am
Posts: 3
gloeglm wrote:
Have you tried using type="java.lang.Integer"?


You mean in the Language class definition in the mapping file? I just tried but it didn't help.
I have used java.lang.Integer in the classed before. The Language mapping is only class which isn't working right now :(
Any other ideas?

- jtm


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 20, 2004 4:33 am 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Can you show the pojos

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 20, 2004 3:16 pm 
Newbie

Joined: Thu Feb 19, 2004 9:19 am
Posts: 3
emmanuel wrote:
Can you show the pojos


I'm sorry, but I didn't quite get what you mean. Could you explain? =)

- jtm


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 24, 2004 2:35 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Mean can you show you java beans (.java code) POJO=Plain Old Java Object copared to complex EJBs and other stuffs...

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 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.