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>

在一种情况下,通过以下命名查询填充图标和显示

<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 并不总是有一个图标,所以它是一对零或更多的关系。我当然得到一个例外:

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.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 专家,但这就是我的理解:由于多对一,Hibernate 想要实例化一个 Icon。但是结果集中的 column_id 为空(因为没有图标)。

问题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