6

永続的なセットである遅延初期化エンティティを読み取ろうとして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>
4

6 に答える 6

2

プロパティタイプを文字から文字列に変更します

<property name="active" type="java.lang.String">
    <column name="ACTIVE" />
</property>
于 2012-04-20T14:02:02.813 に答える
2

問題はマッピング設定に起因していると思われます:

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

ノート:

unsaved-value (オプション - デフォルトは「適切な」値): インスタンスが新しくインスタンス化された (保存されていない) ことを示す識別子プロパティ値で、以前のセッションで保存またはロードされた分離されたインスタンスと区別されます。

PRODUCT_UNITS設定が持続しない原因となっています。

このunsaved-value属性は、Hibernate3 ではほとんど必要ありません。

于 2012-04-24T14:51:30.333 に答える
1

hibernate が文字を int にキャストするという別のリファレンスを見つけました (ドキュメントの状態文字は使用可能なデータ型ですが...)。他の答えはこれを解決するはずです。または、代わりに varchar(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>
于 2012-04-22T03:40:04.503 に答える
-1

お願いします、persistence.xmlファイルをチェックして適切なクラスを追加してください注:-persistence.xmlファイルのデータソースが適切に一致していません

于 2012-07-10T04:53:08.410 に答える