如何查询集合的复合元素? (无法为非实体集合创建元素连接)

时间:2012-09-28 12:42:55

标签: java hibernate collections

我有一类商品

    <class name="Goods">
        ...
    <map name="names" lazy="false" fetch="join">
        <key not-null="true" />
        <map-key column="LANGUAGE_CODE" type="language" length="2"/>
        <composite-element class="Goods$Names">
            <property name="name" not-null="true" type="text"/>
            <property name="description" type="text"/>
        </composite-element>
    </map>

    ...

</class>

当我尝试按名称搜索商品时出现问题:

session.createQuery("select g from Goods g where g.names[:lang].name = 'Some goods name'")


javax.servlet.ServletException: java.lang.IllegalArgumentException: Cannot create element join for a collection of non-entities!

用Hibernate这样做真的不可能吗? 我是否真的需要将商品命名为具有自己ID的实体? 任何解决方案?

1 个答案:

答案 0 :(得分:0)

如果你想用复合键创建实体类,那么你必须去java中的内部类,如果你在hibernate中创建实体而不是你必须保持关系(比如你的实体之间有多对多,一对多,一对一,多对一,然后Hibernate具有在内部执行连接的功能,你不需要自己执行,这是我身边的全部提示,请尝试它,即使这使你的设计很好地理解他人。