hibernate @Anyマッピングを使用して同じ内の複数のエンティティをマップすると、特定のクラスのすべてのオブジェクトをフェッチするリクエストを作成できませんでした。
Hibernateはこの種の要求を処理できないようです。
アプリケーションが起動せず、次のエラーがスローされます。
Invocation of init method failed; nested exception is java.lang.ClassCastException: org.hibernate.type.AnyType cannot be cast to org.hibernate.type.ComponentType
リクエストの「leftjoinfetchic.item i」の部分を削除すると、このエラーが解決します。
たとえば、次のモデルがあります。
@Entity
@NamedQueries({
@NamedQuery(name = "GET_ITEMS", query = "from ItemContainer ic left join fetch ic.item i where ic.id=:containerId and ic.class=:clazz")})
public class ItemContainer {
....
@Any(metaColumn = @Column(name = "TYPE"), fetch = FetchType.LAZY)
@AnyMetaDef(idType = "long", metaType = "string", metaValues = { @MetaValue(targetEntity = Item1.class, value = "I1") })
@JoinColumn(name = "TYPE_ID")
private IItem item;
...
}
(Item1はIItemを実装します)
そして、これが私のDAOです:
@Override
@SuppressWarnings("unchecked")
public List<ItemContainer> getItem1s(final Long containerId) {
return getHibernateTemplate().findByNamedQueryAndNamedParam("GET_ITEMS", new String[] { "containerId", "clazz" },
new Object[] { containerId, Item1.class });
}
それは不可能ですか、それとも私は何かを逃していますか?
ありがとう