2011-10-22 8 views
6

Cuando ejecuto mi programa sin implementar hashcode() y toString(), funciona bien. Pero tan pronto como incluyo hashcode() y toString(), aparece este error de "acceso ilegal a la carga de la colección".Obteniendo el error "acceso ilegal a la carga de la colección"

Mis archivos HBM son

1) booking.hbm.xml

<many-to-one name="userId" class="User" column="user_id" 
     insert="true" update="true" cascade="save-update" > 
    </many-to-one> 
    <many-to-one name="flightId" class="FlightSchedule" 
     column="flight_id" cascade="all" not-null="true"> 
    </many-to-one> 

    <set name="passenger" table="passenger79215" lazy="false" 
     inverse="true" cascade="save-update"> 
     <key column="reference_id" /> 
     <one-to-many class="Passenger" /> 
    </set> 

2) Passenger.hbm.xml

<many-to-one name="referenceid" class="Booking" lazy="false" 
     insert="true" update="true" column="reference_id " 
     cascade="save-update"> 
    </many-to-one> 

3) User.hbm .xml

<set name="booking" table="bookings79215" lazy="true" 
     inverse="false" cascade="save-update"> 
     <key column="user_id" /> 
     <one-to-many class="Booking" /> 
    </set> 

¿Alguien puede explicar el error?

Respuesta

6

Sus métodos hashcode y equals no funcionan correctamente. Asegúrate de que estén correctos. toString() no tiene nada que ver con las clases de colección sino con hashcode y es igual a does.

Supongo que ha anulado tanto hashcode como equals y no solo hashcode.

Object#hashCode() (Java Platform SE 7)

+0

Hola Ravi ... he overrided como esto HashCodeBuilder.reflectionHashCode (this); EqualsBuilder.reflectionEquals (this, obj); ToStringBuilder.reflectionToString (this); –

+0

Confía en una herramienta de terceros para generar su código hash, que puede no generar un código hash distintivo en función de las variables de sus miembros. Si tiene un campo que tiene el mismo valor para dos objetos diferentes, puede obtener un código hash incorrecto. intente generar el hashcode usted mismo (o si usa Eclipse, dentro de su clase, haga clic derecho-> Source-> generate hashcode e igual) –

+0

hello ravi ... también generé Hashcode() y es igual a() en la forma en que siempre y sigue dando el mismo error ... –

2

creo que no se debe utilizar el campo ID (gestionado por hibernación) en iguales y/o hashCode.

Equals y hashCode deben implementarse como una lógica de negocios igual.

0

Tuve el mismo error pero con una resolución diferente. Al igual que el OP, estoy usando el creador de código hash de Apache. Mis objetos son Padre e hijo con una relación uno a muchos. El niño incluye a Parent como miembro para que la clave externa se configure correctamente.

El problema es que el constructor de código hash utiliza todos los campos de miembros, pero cuando se crea Child, su elemento primario no ha terminado de cargarse todavía. Cuando el constructor de código hash hace referencia al miembro principal, Hibernate arroja la excepción porque el padre todavía está cargando.

La solución era excluir la referencia de los padres del constructor código hash en hashCode del niño y es igual a:

@Override 
public boolean equals(final Object obj) 
{ 
    return EqualsBuilder.reflectionEquals(this, obj, "parent"); 
} 

@Override 
public int hashCode() 
{ 
    return HashCodeBuilder.reflectionHashCode(this, "parent"); 
} 
Cuestiones relacionadas