-->
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.  [ 2 posts ] 
Author Message
 Post subject: ERROR BasicPropertyAccessor:167
PostPosted: Tue Oct 10, 2006 12:00 pm 
Newbie

Joined: Tue Oct 10, 2006 11:40 am
Posts: 4
Hi.

I have tried this namedQuery:

Code:
<query name="Plate.findPlatesByExperiment">
         <![CDATA[select p from Plate p where p.experiment = ? ]]>
</query>


but when I try it I get a IllegalArgumentException on my plate id. I haven't been able to figure this out at all. Some googling have brought me to these two pages:

http://www.developpez.net/forums/archive/index.php/t-145907.html
http://forum.hibernate.org/viewtopic.php?t=964102

But since neither my french nor my german is very good I think we need a post of this problem in english as well.

What does the:

ERROR BasicPropertyAccessor:167 - IllegalArgumentException in class: net.bioclipse.lis.pojos.AbstractBaseObject, getter method of property: id

mean? I mean I wrote that class and I didn't put any IllegalArgumentException throwing there...


Hibernate version: 3.1.3

Mapping documents:

Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping auto-import="true" package="net.bioclipse.lis.pojos">
<!-- AbstractBaseObject -->
   <class
    name="AbstractBaseObject"
    table="ABSTRACTBASEOBJECT">
      
      <meta attribute="sync-DAO">true</meta>
      
      <id
       name="id"
       column="id">
         <generator class="native"/>
      </id>

      <property
       name="name"
       column="name"
       type="string"
       length="100" />
      
      <property
       name="deleted"
       column="deleted"
       type="boolean" />
      
      <many-to-one
       name="creator"
       column="creator"
       class="User" />
      
<!-- AbstractAnnotatableObject -->
      <joined-subclass
       name="AbstractAnnotatableObject"
       table="ABSTRACTANNOTATABLEOBJECT">
         
         <key column="id" />
         
         
         <set
          name="abstractAnnotations"
          table="ANNOTATIONANNOTATABLE"
          cascade="all">
            <key column="abstractAnnotatableObject_id" />
            <many-to-many
             class="AbstractAnnotation"
             column="abstractAnnotation_id" />
         </set>      
         
<!-- AbstractAuditableObject -->
         <joined-subclass
          name="AbstractAuditableObject"
          table="ABSTRACTAUDITABLEOBJECT">
            
            <key column="id" />
            
<!-- Plate -->
            <joined-subclass
             name="Plate"
             table="PLATE">
               
               <key column="id" />
               
               <property
                name="barcode"
                column="barcode"
                type="string"
                length="100"
                unique="true" />
               
               <property
                name="cols"
                column="cols"
                type="integer" />
               
               <property
                name="rows"
                column="rows"
                type="integer" />
               
               <many-to-one
                name="experiment"
                column="experiment"
                class="Experiment" />
               
               <set
                name="wells"
                cascade="all">
                  <key column="wellId"/>
                  <one-to-many class="Well"/>
               </set>
               
               
            </joined-subclass>
            
<!-- PlateLayout -->
            <joined-subclass
             name="PlateLayout"
             table="PLATELAYOUT" >
            
                <key column="id" />
               
               <many-to-one
                name="plateType"
                column="plateType"
                class="PlateType" />
               
               <set
                name="layoutWells"
                cascade="all">
                  <key column="wellId"/>
                  <one-to-many class="LayoutWell"/>
               </set>
               
            </joined-subclass>            

<!-- Project -->
            <joined-subclass
             name="Project"
             table="PROJECT" >
            
                <key column="id" />

               <set
                name="experiments"
                cascade="all">
                  <key column="experimentId"/>
                  <one-to-many class="Experiment"/>
               </set>               
            </joined-subclass>            

<!-- Experiment -->
            <joined-subclass
             name="Experiment"
             table="EXPERIMENT" >
            
                <key column="id" />
               
               <many-to-one
                name="project"
                column="project"
                class="Project" />
               
               <set
                name="plates"
                cascade="all">
                  <key column="plateId"/>
                  <one-to-many class="Plate"/>
               </set>   
            </joined-subclass>
                        
         </joined-subclass>
      </joined-subclass>
   </class>
</hibernate-mapping>


Full stack trace of any exception that occurs:
org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of net.bioclipse.lis.pojos.AbstractBaseObject.id
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at org.hibernate.tuple.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:176)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3257)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:2983)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:215)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:108)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:77)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1514)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1576)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at net.bioclipse.lis.genericDAO.GenericDAO.executeFinder(GenericDAO.java:57)
at net.bioclipse.lis.genericDAO.FinderIntroductionInterceptor.invoke(FinderIntroductionInterceptor.java:15)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy10.findExperimentsByProject(Unknown Source)
at net.bioclipse.lis.tests.daos.ExperimentDAOTest.testFindExperimentsByProject(ExperimentDAOTest.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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 org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@1978933
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
... 43 more


Name and version of the database you are using:

mysql Ver 14.12 Distrib 5.0.22, for pc-linux-gnu (i486) using readline 5.1

The generated SQL (show_sql=true):

Debug level Hibernate log excerpt:
17:46:47,402 ERROR BasicPropertyAccessor:167 - IllegalArgumentException in class: net.bioclipse.lis.pojos.AbstractBaseObject, getter method of property: id

Base class with the id field
Code:
package net.bioclipse.lis.pojos;


/**
* Persistent data storing class.
*
* @author jonathan
*
*/
public abstract class AbstractBaseObject implements IAbstractBaseObject {
   private Long id;
   private User creator;
   private String name;
   private boolean deleted;
   
   public AbstractBaseObject(){
      
   }
   
   public AbstractBaseObject(User creator, String name) {
      super();
      this.creator = creator;
      this.name = name;
      this.deleted = false;
   }
   
   public void delete(){
      this.deleted = true;
   }
   
   public void unDelete(){
      this.deleted = false;
   }
   
   public void setDeleted(boolean deleted){
      this.deleted = deleted;
   }
   
   public boolean isDeleted(){
      return this.deleted;
   }
   
   public User getCreator() {
      return creator;
   }

   public void setCreator(User creator) {
      this.creator = creator;
   }

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

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

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   /* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
       final int PRIME = 31;
       int result = PRIME;
       result = PRIME * result + ((creator == null) ? 0 : creator.hashCode());
       result = PRIME * result + (deleted ? 1231 : 1237);
       result = PRIME * result + ((name == null) ? 0 : name.hashCode());
       return result;
    }

   /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
       if (this == obj)
          return true;
       if ( !(obj instanceof AbstractBaseObject) )
          return false;
       final AbstractBaseObject other = (AbstractBaseObject) obj;
       if (creator == null) {
          if (other.getCreator() != null)
             return false;
       }
       else if (!creator.equals(other.getCreator()))
          return false;
       if (deleted != other.isDeleted())
          return false;
       if (name == null) {
          if (other.getName() != null)
             return false;
       }
       else if (!name.equals(other.getName()))
          return false;
       return true;
    }
}


class which is instantiated:
Code:
/**
package net.bioclipse.lis.pojos;

import java.util.Collection;

/**
* Persistent data storing class.
*
* @author jonathan
*
*/
public class Plate extends AbstractAuditableObject {

   private int cols;
   private int rows;
   private String barcode;
   private Set wells;
   private Experiment experiment;
   
   public Plate(){
      
   }
   
   public Plate(User creator, Experiment experiment, String name, int cols, int rows, String barcode) {
      super(creator, name);
      this.cols = cols;
      this.rows = rows;
      this.barcode = barcode;
      this.experiment = experiment;
      
      wells = new HashSet<Well>();
      for(char row = 'a' ; row <= 'a'+rows ; row++){
         for(int col = 1; col <= cols ; col++){
            Well well = new  Well(creator, "", col, row, this);
            well.setPlate(this);
            wells.add(well);
         }
      }
   }

   public Set getWells() {
      return this.wells;
   }

   public void setWells(Set wells) {
      this.wells = wells;
   }

   public String getBarcode() {
      return barcode;
   }
   
   public void setBarcode(String barCode) {
      this.barcode = barCode;
   }

   public int getCols() {
      return cols;
   }

   public int getRows() {
      return rows;
   }

   public void setCols(int cols) {
      this.cols = cols;
   }

   public void setRows(int rows) {
      this.rows = rows;
   }
   
   /* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
       final int PRIME = 31;
       int result = super.hashCode();
       result = PRIME * result + ((barcode == null) ? 0 : barcode.hashCode());
       result = PRIME * result + cols;
       result = PRIME * result + rows;
       result = PRIME * result + ((wells == null) ? 0 : wells.hashCode());
       return result;
    }

   /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
       if (this == obj)
          return true;
       if (!super.equals(obj))
          return false;
       if (getClass() != obj.getClass())
          return false;
       final Plate other = (Plate) obj;
       if (barcode == null) {
          if (other.getBarcode() != null)
             return false;
       }
       else if (!barcode.equals(other.getBarcode()))
          return false;
       if (cols != other.getCols())
          return false;
       if (rows != other.getRows())
          return false;
       if (wells == null) {
          if (other.getWells() != null)
             return false;
       }
       else if (! (getWells().equals(other.getWells())))
          return false;
       return true;
    }

   public String toString(){
      String result =  "Plate id: " + this.getId() +
                       " Name = "   + this.getName() +
                       " Creator = \n"+ this.getCreator() +
                       " Barcode = " + this.getBarcode() +
                       " Cols = " + this.cols +
                       " Rows = " + this.rows +
                       " Wells = \n";
      for (Object o : this.wells) {
         Well well = (Well)o;
         result+="\t" + well.toString() + "\n";
      }
      return result;
   }
   
   public Plate deepCopy(){
      return null;
   }

   public Experiment getExperiment() {
       return experiment;
    }

   public void setExperiment(Experiment experiment) {
       this.experiment = experiment;
    }
}


Top
 Profile  
 
 Post subject: solved it
PostPosted: Tue Oct 10, 2006 1:03 pm 
Newbie

Joined: Tue Oct 10, 2006 11:40 am
Posts: 4
Aha the query should be:

Code:
<query name="Plate.findPlatesByExperiment">
         <![CDATA[select p from Plate p where p.experiment.id = ? ]]>
      </query>


It is (of course) the id that I want to compare. And there is no automapping from entity to id...


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