如何使用hibernate标准来获得正确的结果

如何使用hibernate标准来获得正确的结果,hibernate,Hibernate,我有两门课,分别是“专家”和“技术”,一个专家可以教授几种技术,一种技术由几位专家组成。添加、更新技术独立于类专家。从专家中删除maitrised技术仅删除关联关系 Class Expert{ Long id; // getter and setter String name; // getter and setter; Set<Technology> technos; // getter and setter } Technology{

我有两门课,分别是“专家”和“技术”,一个专家可以教授几种技术,一种技术由几位专家组成。添加、更新技术独立于类专家。从专家中删除maitrised技术仅删除关联关系

Class Expert{
     Long id; // getter and setter
     String name; // getter and setter;
     Set<Technology> technos; // getter and setter
} 

Technology{
     Long id; // gettter and setter
     String name; //getter and setter
}
类专家{
Long id;//getter和setter
字符串名称;//getter和setter;
Set technos;//getter和setter
} 
技术{
Long id;//getter和setter
字符串名称;//getter和setter
}
hibernate映射中反映的两个类之间的关系是

<class name="Expert">
    <!-- put the declaration for id and name --> 

    <set name="technos" table="EXPERT_TECHNO" cascade="delete-orphan">
            <key column="id_expert"/>
            <many-to-many column="id_techno" class = "Technology"/>
    </set>
</class>

<class name="Technology">
 <!-- put declaration for id and name-->
</class>

现在我有一个技术实例,我想找到所有掌握这项技术的专家,那么如何使用hibernate critera获得结果集呢?或者使用createQuery获取结果集的最简单方法

我不熟悉hibernate critera方法,所以我需要你的帮助

进一步问题:


当我想从expert中删除一项技术时,我只想删除“EXPET_TECHNO”表中的一行,然而,我拥有的是该专家。getTechnos.remove(TECHNO),将从表中删除我不想要的技术

首先,解决此问题的最简单方法是使多个关联双向。你必须这么做

Set<Expert> experts = technology.getExperts();
如果您确实希望使用标准执行此操作,则需要执行以下操作:

Criteria c = session.createCriteria(Expert.class, "expert");
c.createAlias("expert.technos", "techno");
c.add(Restrictions.eq("techno.id", technoId));

您可以自己发现这一点,并通过阅读了解许多其他内容。

是的,我发现createAlias函数具有误导性。非常感谢您的解答。另一个问题是,如何使用多对多关联的条件处理更新、删除?条件查询只能从数据库中选择。要删除或更新关联,请从检索到的专家的技术集合中删除或更新实体。
Criteria c = session.createCriteria(Expert.class, "expert");
c.createAlias("expert.technos", "techno");
c.add(Restrictions.eq("techno.id", technoId));