2012-04-06 19 views
5

Tôi đang cố gắng đọc một thực thể được khởi tạo lười biếng ProductUnits là một tập hợp liên tục và đã mở một phiên mới cho cùng một.GenericJDBCException: không thể tải một thực thể

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

Vấn đề là trong thời gian chạy nó ném ngoại lệ

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

nhưng trong khi thực hiện một bước bước debug nó chạy hoàn toàn tốt đẹp. Là nó rằng session.update mất một thời gian hay tôi thiếu một cái gì đó

ngoại trừ stack là

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 

tập tin sau đó lập bản đồ như sau

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

và lập bản đồ sản phẩm

<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

Nó sẽ giúp đỡ nếu bạn cho chúng ta thấy ngoại trừ hoàn stacktrace –

+0

Và, cũng vui lòng cung cấp Lập bản đồ Hibernate cho 'Sản phẩm'. – nobeh

Trả lời

2

Có vấn đề của bạn:

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

Vâng vấn đề là tôi thậm chí không thể tìm ra lý do tại sao điều này xảy ra không có _INT_ datamember trong bảng hoặc thực thể. Điều đó có thể đề cập đến một trường 'Character' isActive. không biết nếu MYSQL đối xử với nhân vật như int. –

+0

là phần 'isActive' của bảng PRODUCT_UNITS? –

+0

Không có phần của bảng Sản phẩm. –

3

Dường như Hibernate đang gặp sự cố khi ánh xạ giá trị ký tự N đến java.lang.Boolean.

Nếu bạn cần bản đồ java.lang.Boolean có thể tốt hơn là sử dụng java.lang.Boolean hoặc org.hibernate.type.YesNoType thay vì 'java.lang.Character'. Bạn có thể đọc thêm trong số reference.

Hoặc bạn cần sử dụng java.lang.Character, hãy làm theo reference để đăng ký loại tùy chỉnh.

2

Vâng Thay đổi loại tài sản từ nhân vật để String

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

Tôi đã thử cách giải quyết đó :) –

1

Tôi tìm thấy một tài liệu tham khảo trong đó nêu ngủ đông mà phôi một nhân vật đến một int (mặc dù các nhân vật trạng thái tài liệu là một kiểu dữ liệu có thể sử dụng ...). Các câu trả lời khác nên giải quyết vấn đề này. Hoặc tôi khuyên bạn chỉ nên sử dụng một varchar (1) thay vào đó - cùng một kết quả cuối cùng.

tức)

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

hoặc

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

tôi nghi ngờ sự cố của bạn arrising từ các thiết lập bản đồ của bạn:

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

Lưu ý:

giá trị chưa lưu (tùy chọn - mặc định là giá trị "hợp lý"): giá trị thuộc tính số nhận dạng cho biết một thể hiện mới là được khởi tạo (chưa lưu), phân biệt nó với các trường hợp tách rời được lưu hoặc tải trong phiên trước .

Cài đặt gây ra PRODUCT_UNITS không tồn tại.

Thuộc tính unsaved-value hầu như không bao giờ cần thiết trong Hibernate3.

+0

Nhưng nó vẫn không trả lời tại sao nó chạy tốt trong quá trình gỡ lỗi. –

0

xin vui lòng, kiểm tra tập tin persistence.xml thêm các lớp học phù hợp Lưu ý: -Dữ liệu Nguồn tập tin persistence.xml không phù hợp đúng

+0

Đây phải là nhận xét chứ không phải là câu trả lời. Kiểm tra [câu hỏi metaSO] này (http://meta.stackexchange.com/questions/7656/how-do-i-write-a-good-answer-to-a-question) và [Jon Skeet: Blog mã hóa] (http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx) về cách đưa ra câu trả lời đúng. – Yaroslav

Các vấn đề liên quan