Java 如何按所有字段进行搜索休眠

Java 如何按所有字段进行搜索休眠,java,spring,hibernate,search,model-view-controller,Java,Spring,Hibernate,Search,Model View Controller,我想知道,如何在我的dao文件中编写方法,以获得与正则表达式匹配的所有对象?如何实现按所有字段排除字段组进行搜索 例如,用户输入一个文本字段,并获取符合条件{there can be some symbols}{userText}{there can be some symbols}的班主任对象列表 我怎样才能绕过排除组的所有字段 这是我的实体类 @Entity @Table(name="teacher", schema = "public")//, schema = "public" @Sup

我想知道,如何在我的dao文件中编写方法,以获得与正则表达式匹配的所有对象?如何实现按所有字段排除字段组进行搜索

例如,用户输入一个文本字段,并获取符合条件{there can be some symbols}{userText}{there can be some symbols}的班主任对象列表

我怎样才能绕过排除组的所有字段

这是我的实体类

@Entity
@Table(name="teacher", schema = "public")//, schema = "public"
@SuppressWarnings("unused")
public class Teacher extends Human implements Serializable {

    @Id
    @Column(name="teacher_id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    @ManyToMany(targetEntity = Group.class,fetch=FetchType.EAGER)
    @JoinTable(name = "teacher_groups",
            joinColumns = { @JoinColumn(name = "teacher_id") },
            inverseJoinColumns = { @JoinColumn(name = "group_id") })
    private List<Group> groups = new ArrayList();//<>

    public List<Group> getGroups() {
        return groups;
    }
    public void setGroups(ArrayList<Group> groups) {
        this.groups = groups;
    }

    public void addGroup(Group group){

            if (!(this.groups.contains(group))){
                groups.add(group);
            }
    }

    public void removeGroup(Group group){
        for (int i = 0; i < groups.size(); i++) {
            if (groups.get(i).getId().equals(group.getId()))
                groups.remove(i);
        }
    }

    public Teacher(String fam, String name, String otch, Date dateOfBirth, String phoneNumber, ArrayList<Group> groups) {
        super(fam, name, otch, dateOfBirth, phoneNumber);
        this.groups = groups;
    }

    public Teacher(String fam, String name, String otch, Date dateOfBirth, String phoneNumber) {
        super(fam, name, otch, dateOfBirth, phoneNumber);
    }

    @Override
    public String toString() {
        return "Teacher{"  + id + " "+
                "groups=" + groups +
                "} " + super.toString();
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Teacher(){}

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Teacher that = (Teacher) o;
        return this.getId().equals(that.getId());
    }
}
@Repository
public class TeacherDaoImlp implements TeacherDao {

    @PersistenceContext
    private EntityManager em;

    @Override
    public void add(Teacher teacher){
        em.persist(teacher);
    }

    @Override
    public List<Teacher> getTeachersList(){
        CriteriaQuery<Teacher> criteriaQuery = em.getCriteriaBuilder().createQuery(Teacher.class);
        Root<Teacher> root = criteriaQuery.from(Teacher.class);
        return  em.createQuery(criteriaQuery).getResultList();
    }

    @Override
    public void update(Teacher teacher) {
        em.merge(teacher);
    }

    @Override
    public Teacher findById(Long teacherId) {
        Teacher teacher = em.find(Teacher.class,teacherId);
        if (teacher==null)
            throw new EntityNotFoundException("Teacher with ID = " + teacherId + " not found");
        return teacher;
    }

    @Override
    public void delete(Long teacherId) {
       Teacher teacher = em.find(Teacher.class, teacherId);
       if (teacher != null) em.remove(teacher);
       else throw new EntityNotFoundException("Teacher with ID = " + teacherId + " not found");
    }

}
@实体
@表(name=“teacher”,schema=“public”)/,schema=“public”
@抑制警告(“未使用”)
公共类教师扩展可序列化的人类工具{
@身份证
@列(name=“teacher\u id”)
@GeneratedValue(策略=GenerationType.SEQUENCE)
私人长id;
@ManyToMany(targetEntity=Group.class,fetch=FetchType.EAGER)
@JoinTable(name=“教师组”,
joinColumns={@JoinColumn(name=“teacher_id”)},
inverseJoinColumns={@JoinColumn(name=“group_id”)})
私有列表组=新的ArrayList()//
公共列表getGroups(){
返回组;
}
公共void集合组(ArrayList组){
这个组=组;
}
公共无效添加组(组){
如果(!(this.groups.contains(group))){
组。添加(组);
}
}
public void removeGroup(组){
对于(int i=0;i
这是我的刀课

@Entity
@Table(name="teacher", schema = "public")//, schema = "public"
@SuppressWarnings("unused")
public class Teacher extends Human implements Serializable {

    @Id
    @Column(name="teacher_id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    @ManyToMany(targetEntity = Group.class,fetch=FetchType.EAGER)
    @JoinTable(name = "teacher_groups",
            joinColumns = { @JoinColumn(name = "teacher_id") },
            inverseJoinColumns = { @JoinColumn(name = "group_id") })
    private List<Group> groups = new ArrayList();//<>

    public List<Group> getGroups() {
        return groups;
    }
    public void setGroups(ArrayList<Group> groups) {
        this.groups = groups;
    }

    public void addGroup(Group group){

            if (!(this.groups.contains(group))){
                groups.add(group);
            }
    }

    public void removeGroup(Group group){
        for (int i = 0; i < groups.size(); i++) {
            if (groups.get(i).getId().equals(group.getId()))
                groups.remove(i);
        }
    }

    public Teacher(String fam, String name, String otch, Date dateOfBirth, String phoneNumber, ArrayList<Group> groups) {
        super(fam, name, otch, dateOfBirth, phoneNumber);
        this.groups = groups;
    }

    public Teacher(String fam, String name, String otch, Date dateOfBirth, String phoneNumber) {
        super(fam, name, otch, dateOfBirth, phoneNumber);
    }

    @Override
    public String toString() {
        return "Teacher{"  + id + " "+
                "groups=" + groups +
                "} " + super.toString();
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Teacher(){}

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Teacher that = (Teacher) o;
        return this.getId().equals(that.getId());
    }
}
@Repository
public class TeacherDaoImlp implements TeacherDao {

    @PersistenceContext
    private EntityManager em;

    @Override
    public void add(Teacher teacher){
        em.persist(teacher);
    }

    @Override
    public List<Teacher> getTeachersList(){
        CriteriaQuery<Teacher> criteriaQuery = em.getCriteriaBuilder().createQuery(Teacher.class);
        Root<Teacher> root = criteriaQuery.from(Teacher.class);
        return  em.createQuery(criteriaQuery).getResultList();
    }

    @Override
    public void update(Teacher teacher) {
        em.merge(teacher);
    }

    @Override
    public Teacher findById(Long teacherId) {
        Teacher teacher = em.find(Teacher.class,teacherId);
        if (teacher==null)
            throw new EntityNotFoundException("Teacher with ID = " + teacherId + " not found");
        return teacher;
    }

    @Override
    public void delete(Long teacherId) {
       Teacher teacher = em.find(Teacher.class, teacherId);
       if (teacher != null) em.remove(teacher);
       else throw new EntityNotFoundException("Teacher with ID = " + teacherId + " not found");
    }

}
@存储库
公共类TeacherDaoImlp实现TeacherDao{
@持久上下文
私人实体管理者;
@凌驾
公共空白添加(教师){
em.persist(教师);
}
@凌驾
公共列表GetteacherList(){
CriteriaQuery CriteriaQuery=em.getCriteriaBuilder().createQuery(Teacher.class);
Root=criteriaQuery.from(Teacher.class);
返回em.createQuery(criteriaQuery).getResultList();
}
@凌驾
公共无效更新(教师){
em.merge(教师);
}
@凌驾
公共教师findById(长教师ID){
Teacher=em.find(Teacher.class,teacherId);
如果(教师==null)
抛出新EntityNotFoundException(“ID为=“+teacherId+”未找到的教师”);
归国教师;
}
@凌驾
公共无效删除(长教师ID){
教师=em.find(Teacher.class,teacherId);
如果(teacher!=null)em.remove(teacher);
否则抛出新EntityNotFoundException(“ID为=“+teacherId+”未找到的教师”);
}
}
您应该看看。 它是lucene和hibernate的混合体

索引字段映射将如下所示:

  @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
  private String phoneNumber;
和用于搜索的dao方法:

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
        .buildQueryBuilder().forEntity(Teacher.class).get();
org.apache.lucene.search.Query luceneQuery = qb
        .keyword()
        .onFields("fam", "name", "otch", "dateOfBirth", "phoneNumber")
        .matching("user text")
        .createQuery();

Query jpaQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, Teacher.class);
List result = jpaQuery.getResultList();
依赖关系:

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-search-orm</artifactId>
   <version>5.11.3.Final</version>
</dependency>

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-search-elasticsearch</artifactId>
   <version>5.11.3.Final</version>
</dependency>

org.hibernate
休眠搜索orm
5.11.3.最终版本
org.hibernate
hibernate搜索弹性搜索
5.11.3.最终版本

更好地使用过程你是什么意思?我应该添加哪些依赖项?我刚刚更新了答案。但是你可以看看