2014-02-20 51 views
0

映射集独立标准我有三个表StudentDepartmentStudent_Detail在休眠

Table Student 
-------------- 
std_id (pk) 

Table Student_Detail 
-------------- 
std_id (pk) 
Dept_ID (pk) 

Table Department 
-------------- 
Dept_ID (pk) 

Student.hbm.xml

<map name="studentDetails" table="STUDENT_DETAIL" lazy="false" > 
<key column = "std_id"> 
<map-key-many-to-many column="Dept_ID" class="Department"> 
<element column="Remarks" type="string"/> 
</map> 

现在我想的映射写detachedCriteria查询

select * from student S 
JOIN Student_Detail SD ON SD.std_id = S.std_Id 
JOIN Department D ON D.dept_Id = SD.dept_Id 
where AND D.name = 'x' and SD.remarks ='x' 
+0

与''的映射似乎对我来说太复杂了。如果您有机会更改配对表 - 请拥有自己的替代关键字,请尝试阅读以下内容:http://stackoverflow.com/questions/15510748/。我想说的是,我们可以使用不那么奇特的映射,也可以简单地使用它。 –

回答

0

F如果你的hibernate映射正确的话,应该可以使用DetachedCriteria

DetachedCriteria detachedCriteria = DetachedCriteria.forClass(
      Student.class, "studentAlias"); 
    detachedCriteria.createAlias("details", "detailsAlias")// details is collection of `StudentDetail` in `Student` class 
      .createAlias("detailsAlias.department", "departmentAlias")//department is `Department` type variable in `StudentDetail` 
      .add(Restrictions.eq("detailsAlias.remarks", "x")) 
      .add(Restrictions.eq("departmentAlias.name", "x")); 
    List<Student> list = detachedCriteria 
      .getExecutableCriteria(hibernateSession).setMaxResults(100) 
      .list(); 

为了这个,我创建的类StudentDepartmentStudentDetail类以下注释。

@Entity 
@Table(name = "student") 
public class Student { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long std_id; 

    @OneToMany(mappedBy = "student", fetch = FetchType.LAZY) 
    @Fetch(FetchMode.SELECT) 
    private List<StudentDetail> details; 
    // getter/setters 
} 

@Entity 
@Table(name = "department") 
public class Department { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long Dept_ID; 

    private String name; 

    private String remarks; 
    // getter/setters 
} 


@Entity 
@Table(name = "student_detail") 
public class StudentDetail { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name = "std_id") 
    @Fetch(FetchMode.SELECT) 
    private Student student; 

    @ManyToOne 
    @JoinColumn(name = "Dept_ID") 
    @Fetch(FetchMode.SELECT) 
    private Department department; 

    private String remarks; 
    // getter/setters 
} 
+0

我还没有创建类student_details。 – Krishna

+0

那么你将如何获得'备注'? – Yogesh

+0

这就是我想知道的,如果可以使用标准或HQL – Krishna