私は次のものを持っています:
<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
ありがとう!