2012-04-06 10 views
5

मैं आलसी प्रारंभिक इकाई ProductUnits पढ़ने की कोशिश कर रहा हूं जो एक सतत सेट है, और इसके लिए एक नया सत्र खोला गया है।जेनेरिक जेडीबीसीएक्सप्शन: एक इकाई लोड नहीं कर सका

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

समस्या रन टाइम यह अपवाद

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

फेंकता के दौरान होता है, लेकिन जब कदम डिबग द्वारा एक कदम कर यह बिल्कुल ठीक चलाता है। ऐसा लगता है कि session.update कुछ समय लगता है या मैं कुछ याद आ रही है है

अपवाद ढेर

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 

तो मानचित्रण फ़ाइल के रूप में

<?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> 

और उत्पाद मानचित्रण इस प्रकार है

<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

यह मदद मिलेगी अगर आप हमें पूरा अपवाद स्टैकट्रेस –

+0

से पता चला है और, यह भी प्रदान करें 'उत्पाद' के लिए हाइबरनेट मैपिंग। – nobeh

उत्तर

2

आपकी समस्या है:

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

वैसे बात यह है कि मैं यह समझने में भी सक्षम नहीं हूं कि यह क्यों आ रहा है, तालिका या इकाई में कोई _INT_ datamember नहीं है। यह संभवतः एक 'वर्ण' फ़ील्ड को संदर्भित करता है। यह नहीं पता कि MYSQL चरित्र को int के रूप में मानता है या नहीं। –

+0

PRODUCT_UNITS तालिका का 'isActive' फ़ील्ड हिस्सा है? –

+0

कोई उत्पाद तालिका के अपने हिस्से। –

3

लगता है कि हाइबरनेट को N को java.lang.Boolean पर एक वर्ण मान मैपिंग करने में समस्या हो रही है।

आप मैप करना java.lang.Boolean की जरूरत है शायद यह बेहतर या तो java.lang.Boolean या org.hibernate.type.YesNoType बजाय 'java.lang.Character' का उपयोग करने के लिए है। आप reference में और पढ़ सकते हैं।

या आपको java.lang.Character का उपयोग करने की आवश्यकता है, तो कस्टम प्रकार पंजीकृत करने के लिए reference का पालन करें।

2

खैर बदलें संपत्ति मैं एक संदर्भ है कि हाइबरनेट बताते हुए पाया स्ट्रिंग

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

मैंने उस वर्कअराउंड की कोशिश की है :) –

1

के चरित्र से प्रकार किसी पूर्णांक (भले ही प्रलेखन राज्य चरित्र एक प्रयोग करने योग्य डेटा प्रकार है ...) के लिए एक चरित्र डाले। अन्य उत्तरों को हल करना चाहिए। या मैं आपको सलाह देता हूं कि आप केवल एक वर्चर (1) का उपयोग करें - एक ही अंतिम परिणाम।

यानी)

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

या

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

मुझे लगता है आपकी समस्या आपके मानचित्रण सेटिंग्स से arrising है:

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

नोट:

न सहेजा गया-मूल्य (वैकल्पिक - एक "समझदार" मान चूक): एक पहचानकर्ता संपत्ति के मूल्य कि एक उदाहरण इंगित करता है नव, instantiated (सहेजे गए) है अलग उदाहरणों कि बचाया या पिछले सत्र में लोड किया गया से यह भेद ।

सेटिंग PRODUCT_UNITS को जारी रखने के लिए नहीं है।

unsaved-value विशेषता लगभग Hibernate3 में की जरूरत कभी नहीं किया गया है।

+0

लेकिन यह अभी भी जवाब नहीं दे रहा है कि यह डिबगिंग के दौरान ठीक क्यों चलता है। –

0

कृपया जांच करें कि persistence.xml फ़ाइल उचित वर्गों को जोड़ने नोट: persistence.xml फ़ाइल का डाटा स्रोत ठीक से मेल नहीं खाता है

+0

यह एक टिप्पणी होना चाहिए, जवाब नहीं। इस [metaSO सवाल] की जाँच करें (http://meta.stackexchange.com/questions/7656/how-do-i-write-a-good-answer-to-a-question) और [जॉन स्कीट: कोडिंग ब्लॉग] (http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx) सही उत्तर देने के तरीके पर। – Yaroslav

संबंधित मुद्दे