2012-04-06 16 views
5

Estoy tratando de leer una entidad perezosa inicializada ProductUnits que es un conjunto persistente, y se abrió una nueva sesión para el mismo.GenericJDBCException: no se pudo cargar una entidad

Session session = HibernateUtil.getSessionFactory().openSession(); 
session.update(stock.getProduct()); 
List<ProductUnits> units = new ArrayList<ProductUnits>(stock.getProduct().getUnits()); 

El problema es durante el tiempo de ejecución se produce la excepción

org.hibernate.exception.GenericJDBCException: could not load an entity: [hibernate.tables.plain.Product#1] 

pero mientras se hace un paso a paso de depuración se ejecuta perfectamente bien. ¿Es que la session.update lleva algún tiempo o me estoy perdiendo algo

la pila de excepción es

Exception in thread "AWT-EventQueue-0" org.hibernate.exception.GenericJDBCException: could not load an entity: [hibernate.tables.plain.Product#2] 
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
at org.hibernate.loader.Loader.loadEntity(Loader.java:1895) 
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71) 
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65) 
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072) 
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434) 
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415) 
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165) 
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:121) 
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905) 
at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:863) 
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:95) 
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140) 
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) 
at hibernate.tables.plain.Product_$$_javassist_15.getUnits(Product_$$_javassist_15.java) 
at bill.mainBill.InputProductsPanel.computeStockAvailablity(InputProductsPanel.java:278) 
at bill.mainBill.InputProductsPanel.findStock(InputProductsPanel.java:242) 
at bill.mainBill.ProductDetailPanel.setStats(ProductDetailPanel.java:315) 
at bill.mainBill.ProductDetailPanel$3.focusLost(ProductDetailPanel.java:187) 
at java.awt.AWTEventMulticaster.focusLost(Unknown Source) 
at java.awt.Component.processFocusEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) 
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) 
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$000(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 


    Caused by: java.sql.SQLException: Invalid value for getInt() - 'N' 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) 
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2727) 
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2815) 
at org.hibernate.type.IntegerType.get(IntegerType.java:51) 
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184) 
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173) 
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:105) 
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2124) 
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1404) 
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332) 
at org.hibernate.loader.Loader.getRow(Loader.java:1230) 
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603) 
at org.hibernate.loader.Loader.doQuery(Loader.java:724) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) 
at org.hibernate.loader.Loader.loadEntity(Loader.java:1881) 
... 48 more 

archivo a continuación, la cartografía es la siguiente

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Apr 3, 2012 1:21:15 PM by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
<class name="hibernate.tables.plain.ProductUnits" table="PRODUCT_UNITS"> 
    <composite-id mapped="false" unsaved-value="undefined"> 
    <key-many-to-one class="hibernate.tables.plain.Product" 
    column="Product_ID" name="product"/> 
    <key-many-to-one class="hibernate.tables.plain.Unit" column="Unit_ID" name="unit"/> 
    </composite-id> 
    <property generated="never" lazy="false" name="basePrice" type="java.lang.Double"> 
    <column name="BASE_PRICE"/> 
    </property> 
</class> 
</hibernate-mapping> 

y la Asignación de productos

<class name="hibernate.tables.plain.Product" table="PRODUCT"> 
     <id name="id" type="java.lang.Long"> 
      <column name="ID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="name" type="java.lang.String"> 
      <column name="NAME" /> 
     </property> 
     <property name="recommendedHolding" type="java.lang.Double"> 
      <column name="RECOMMENDED_HOLDING" /> 
     </property> 
     <set name="units" table="Product_Units" inverse="false" lazy="true"> 
      <key> 
       <column name="Product_ID" /> 
      </key> 
      <one-to-many class="hibernate.tables.plain.ProductUnits" /> 
     </set> 
     <property name="active" type="java.lang.Character"> 
      <column name="ACTIVE" /> 
     </property> 
    </class> 
+1

Sería de gran ayuda si nos mostró la completa StackTrace excepción –

+0

Y, también, por favor proporcione Mapeo de Hibernate para 'Producto'. – nobeh

Respuesta

2

Tiene su problema:

Caused by: java.sql.SQLException: Invalid value for getInt() - 'N' 
+0

Bueno, el punto es que ni siquiera puedo descifrar por qué viene esto: no hay _INT_ datamember en la tabla o la entidad. Eso probablemente se refiere a un campo 'Character' isActive. no sé si MYSQL trata el carácter como int. –

+0

es la parte del campo 'isActive' de la tabla PRODUCT_UNITS? –

+0

No forma parte de la tabla Producto. –

3

Parece que Hibernate tiene un problema al asignar un valor de carácter N a java.lang.Boolean.

Si necesita asignar java.lang.Boolean tal vez es mejor utilizar ya sea java.lang.Boolean o org.hibernate.type.YesNoType en lugar de 'java.lang.Character'. Puede leer más en el reference.

O necesita usar java.lang.Character, siga el reference para registrar un tipo personalizado.

2

Bueno Cambiar el tipo de propiedad de carácter en cadena

<property name="active" type="java.lang.String"> 
    <column name="ACTIVE" /> 
</property> 
+0

He intentado esa solución :) –

1

he encontrado otra referencia que indica que arroja un personaje de hibernación a un int (a pesar de que el personaje Estado de la documentación es un tipo de datos utilizable ...). Las otras respuestas deberían resolver esto. O le recomendaría que simplemente use un varchar (1) en su lugar, el mismo resultado final.

es decir)

@Column(name = "column", nullable = false, length = 1) 
public String getColumn() { 
    return column; 
} 

o

<property name="active" type="java.lang.String"> 
     <column name="ACTIVE" length="1"/> 
    </property> 
2

Sospecho que el problema se Arrising de sus ajustes de proyección:

<composite-id mapped="false" unsaved-value="undefined"> 

Nota:

unsaved-value (opcional - por defecto un valor "sensible"): un valor de la propiedad identificador que indica una instancia está recién instanciado (guardar), distinguiéndola de instancias separadas que fueron guardadas o cargadas en una sesión previa .

La configuración está causando que PRODUCT_UNITS no persista.

El atributo unsaved-value casi nunca se necesita en Hibernate3.

+0

Pero todavía no responde por qué funciona bien durante la depuración. –

0

favor, compruebe el archivo persistence.xml añadir las clases apropiadas Nota: -Los datos Fuente de archivo persistence.xml no se ajustan correctamente

+0

Esto debería ser un comentario, no una respuesta. Verifique esta [pregunta de metaSO] (http://meta.stackexchange.com/questions/7656/how-do-i-write-a-good-answer-to-a-question) y [Jon Skeet: Coding Blog] (http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx) sobre cómo dar una respuesta correcta. – Yaroslav

Cuestiones relacionadas