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

Java 如何查询集合的复合元素?(无法为非实体集合创建元素联接),java,hibernate,collections,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 cl

我有一类商品

    <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>
使用Hibernate真的不可能吗?
我真的需要用自己的id将商品命名为实体吗?
有什么解决方案吗?

如果您想用复合键创建实体类,那么您必须使用java中的内部类,如果您在hibernate中创建实体,那么您必须维护实体之间的关系(如多对多、一对多、一对一、多对一),然后Hibernate有内部执行连接的功能,您不需要自己执行,这是我这边的全部提示,请尝试一下,即使这使您的设计很好地被其他人理解

为什么不将其作为实体?我不想要实体,因为我不想要额外的id列。因此,我的第一个方法是创建具有复合id的实体。但最后我了解了如何创建查询。所以这个查询很简单:从商品g中选择g加入g.names带有索引的名称(name)=:lang where names.name='some Goods names'如果这个答案解决了您的问题,请批准它,这样也可以帮助其他人
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!