java - @OneToMany 关联的标准

标签 java hibernate

Student 类与 Resume 类型的对象具有 OneToOne 关联,Resume 类与 Master 类型的集合具有 OneToMany 关联,并且 master 具有属性 degreeName。 我想要实现的是:

选择student.resume.masters.degreeName在(?,?,?,.....)中的所有学生

它应该搜索所有集合(主)对象。

下面的代码没有编译错误,但没有给出预期的结果,请指正。

学生实体:

 @Entity
 public class Student {
      @OneToOne(fetch = FetchType.LAZY, mappedBy = "student", cascade = CascadeType.ALL)
      private Resume resume;
   }  

简历实体:

@Entity
public class Resume {
     @OneToMany(mappedBy="resume",cascade=CascadeType.ALL)
     private List<Master> masters=new ArrayList<>();
     @OneToOne(fetch=FetchType.LAZY)
     @PrimaryKeyJoinColumn
     private Student student;
   }  

主实体:

@Entity
public class Master {
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   private int id;
   @ManyToOne(fetch=FetchType.LAZY)
   @JoinColumn(name="resume_id")
   private Resume resume;
   private String degreeName;
}

道:

    Criteria studentCriteria = session.createCriteria(Student.class);
    Criteria resumeCriteria = studentCriteria.createCriteria("resume");
    Criteria mastersCriteria = resumeCriteria.createCriteria("masters");
    List<String> degreeslist = new ArrayList<>(Arrays.asList(degrees));
    //degreeList is collection of values on which the student will be searched

    if (degreeslist.size() == 1) {
        mastersCriteria.add(Restrictions.eq("degreeName",
                degreeslist.get(0)));
    } else {

        mastersCriteria.add(Restrictions.in("degreeName", degreeslist));
      }

最佳答案

    Criteria mastersCriteria = getSession().createCriteria(Student.class, "student");
    mastersCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);    
    mastersCriteria.createAlias("student.resume", "resume"); 
    mastersCriteria.createAlias("resume.masters","masters");

    if (degreeslist.size() == 1) {
          mastersCriteria.add(Restrictions.eq("masters.degreeName", degreeslist.get(0)));  
    } else {
          mastersCriteria.add(Restrictions.in("masters.degreeName", degreeslist));
    }


    List<Student> students = mastersCriteria.list();

关于java - @OneToMany 关联的标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18462305/

相关文章:

java - 使用 Junit TDD 是否需要在方法中返回?

java - Spring HTTP 调用器的使用

java - 更新方法中列表的参数 : return list or not

java - 测试 spring hibernate dao 和服务层

java - hsqldb 不支持列的 columnDefinition 属性

java - Android 应用启动后掉落

java - Tomcat 7 内的 Web 应用程序在 12-18 小时后停止响应

java - 仅在辅助表中保留值

java - 为什么 Hibernate 会记录一个它实际上并未执行的不同查询?

java - 如何将 HibernateTemplate.find(...) 与列表一起使用