多个@OneToMany 会降低性能

问题描述

考虑下面的实体(删除了 Getter 和 Setter 以减少代码)-

public class Organization {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @OneToMany(fetch = FetchType.LAZY)
  @JoinColumn
  private List<Account> accounts;
}


public class Account {
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
    
      @OneToMany(fetch = FetchType.LAZY)
      @JoinColumn
      private List<Contact> contacts;
    }


public class Contact {
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
    
      @OneToMany(fetch = FetchType.LAZY)
      @JoinColumn
      private List<Certification> certifications;
    }


public class Certification {
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
    
      @OneToMany(fetch = FetchType.LAZY)
      @JoinColumn
      private List<Skill> skills;
    }


public class Skill {
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
    
      private String name;
    }

我正在使用 spring boot JPA 规范来提取所有拥有技能认证的组织,比如 Java

    public static Specification<Organization> getPartner() {
        return (root,cq,cb) -> {
          
              Join<Organization,Skill> skillJoin = root.join("accounts").join("contacts")
                  .join("certifications").join("skills");
              return cb.equal(skillJoin.get("name"),"java");
        }
    }

以上代码需要8-9s才能返回结果。可能是由于多个 @OneToMany 加入。 请提出任何性能改进建议:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)