0

私は次のものを持っています:

<class name="show"...>  
  ...  
  <many-to-one name="icon"  ... lazy="proxy" fetch="join" not-found="ignore" >
        <column name="Icon_ID" not-null="false" />
  </many-to-one> 
</class>

<class ... table="icon" lazy="true">
 ...  
  <id name="id" column="ID" type="long" unsaved-value="-1">
    <generator class="identity" />
  </id>
</class>

次の名前付きクエリを介して、アイコンとショーが 1 つのケースで取り込まれます

<sql-query name="get-shows">
<return alias="ps" class.../>
...
<return-join alias="icon" property="ps.icon">
    <return-property name="id" column="ps.Icon_ID2" />
    <return-property name="url" column="ps.Icon_Url" />
    <return-property name="description" column="ps.Icon_Description" />
...
</sql-query>

私が見た多くの投稿と同様に、show には常にアイコンがあるとは限らないため、1 対 0 またはそれ以上の関係です。もちろん例外があります:

org.hibernate.exception.SQLGrammarException: org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) で org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) でクエリを実行できませんでした

原因: java.sql.SQLException: 列 'Icon_ID3_1_1_' が見つかりません。com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) ) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) で com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1163) で com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java: 3055) com.mchange.v2.c3p0.impl.NewProxyResultSet.getLong(NewProxyResultSet.java:2625) で org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:74) で org.hibernate. type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)

私は Hibernate の専門家ではありませんが、次のように理解しています。多対 1 であるため、Hibernate はアイコンをインスタンス化する必要があります。ただし、resultSet の column_id は null です (アイコンがないため)。

質問 1: これを正しく理解していますか?

質問 2: カスタム Tupolizer/プロキシを使用してこれを克服できますか?

私は (2) に数時間を費やしましたが、それほど遠くまでは行きませんでした。質問 3: 質問 (2) に対する答えが「はい」の場合、だれかが tuplizer/proxy を使用してこれに対処する方法の簡単な (!) 例を教えてください。私がググった例はあまりにも複雑で (ググると際限なく得られる遅延読み込みの例)、ドキュメントにある例はおそらく単純すぎます (?)

PS。質問 4: この場合、結果セット全体が名前付きクエリから取得されるのに、なぜ not-found="ignore" が機能しないのですか? それともそれが実際に問題ですか?

PS 2. はい、これを見ました: https://forum.hibernate.org/viewtopic.php?t=949458

ありがとう!

4

0 に答える 0