【问题标题】:How to filter an entity in hibernate with hibernate filters如何使用休眠过滤器过滤休眠中的实体
【发布时间】:2017-06-08 20:35:39
【问题描述】:

我需要在对象列表中过滤一个实体,例如:

public class Student {

    private int id;

    private List<Course> courses;

}

public class Course {

    private int id;

    private String name;

    private float note;

    private Classroom classroom;

}

public class Classroom {

    private int id;

    private String classroom;

} 

如何获取一个包含课程列表的学生对象,课程列表中只有笔记大于 70,并且位于教室 23(例如)?

有没有办法使用实体的名称而不是数据库的列之一?

或者我如何将hibernate为实体生成的别名与sql关联起来?

我附上了来自休眠过滤器的链接: https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch19.html

【问题讨论】:

  • 您自己尝试过任何配置吗?也许你可以发布它,让我们看看它有什么问题。你有没有得到任何错误等。
  • 我只想知道能不能被java实体过滤,不能被数据库实体过滤。
  • 以及如何与动态生成hibernate的别名进行join。

标签: java hibernate hibernate-mapping hibernate-criteria hibernate-filters


【解决方案1】:

好的,它认为这应该可以解决问题:

实体

public class Student {

    private int id;

    @OneToMany(mappedBy = "student")
    @Filter(name = "defaultCoursesFilter")   
    private List<Course> courses;

}

@FilterDef(name = "defaultCoursesFilter"
                , defaultCondition=" notes > 70")
public class Course {

    private int id;

    private String name;

    private float note;

    @ManyToOne
    @Filter(name = "defaultClassromFilter")
    private Classroom classroom;

}


@FilterDef(name = "defaultClassromFilter"
                , defaultCondition=" id  = 23")
public class Classroom {

    private int id;

    private String classroom;

} 

查询前

Session session = sessionFactory.getCurrentSession();
session.enableFilter("defaultCoursesFilter");
session.enableFilter("defaultClassromFilter");

// query

【讨论】:

  • 非常感谢,我试试。
猜你喜欢
  • 1970-01-01
  • 2011-10-15
  • 2011-09-26
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多