我想优化对搜索请求的处理
我有一个主要对象Referentiel:
@Entity
@Table(name = "referentiel")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Referentiel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "uuid", nullable = false)
private UUID uuid;
@NotNull
@Size(max = 30)
@Column(name = "reference", length = 30, nullable = false)
private String reference;
....
@OneToMany(mappedBy = "reference")
@JsonIgnoreProperties("referentiels")
private Set<ReferentielMetal> metaux = new HashSet<>();和对象"ReferentielMetal“
@Entity
@Table(name = "referentiel_metal")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class ReferentielMetal implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
....
@ManyToOne
@JsonIgnoreProperties("referentielMetals")
private Referentiel reference;
@ManyToOne
@JsonIgnoreProperties("referentielMetals")
private Metal metal;在我的治疗中,我要求所有的推荐人都有标准。然后,我遍历每个事件以完成数据
例如,对于每个引用对象,我使用ReferentielId搜索所有ReferentielMetal:
@Query("select referentiel_metal from ReferentielMetal referentiel_metal where referentiel_metal.reference.id = :referenceId")
List<ReferentielMetal> findAllByReferenceId(@Param("referenceId") Long referenceId);在我的日志中,我看到了以下请求:
select referentie0_.id as id1_89_, referentie0_.createur_id as createur6_89_, referentie0_.date_creation as date_cre2_89_, referentie0_.date_modification as date_mod3_89_, referentie0_.metal_id as metal_id7_89_, referentie0_.modificateur_id as modifica8_89_, referentie0_.poids as poids4_89_, referentie0_.principal as principa5_89_, referentie0_.reference_id as referenc9_89_ from referentiel_metal referentie0_ where referentie0_.reference_id=?但在此之后,我在日志中看到了对引用表的请求
select referentie0_.id as id1_89_, referentie0_.createur_id as createur6_89_, referentie0_.date_creation as date_cre2_89_, referentie0_.date_modification as date_mod3_89_, referentie0_.metal_id as metal_id7_89_, referentie0_.modificateur_ ...
from referentiel_digital referentie0_
left outer join jhi_user user1_ on referentie0_.createur_id=user1_.id
left outer join jhi_user user2_ on referentie0_.modificateur_id=user2_.id
left outer join referentiel referentie3_ on referentie0_.reference_id=referentie3_.id
left outer join fournisseur_entite fournisseu4_ on referentie3_.code_fournisseur_id=fournisseu4_.id
left outer join jhi_user user5_ on fournisseu4_.createur_id=user5_.id
left outer join entite entite6_ on fournisseu4_.entite_id=entite6_.id
left outer join jhi_user user7_ on entite6_.createur_id=user7_.id
left outer join entite entite8_ on entite6_.entite_mere_id=entite8_.id
left outer join jhi_user user9_ on entite8_.modificateur_id=user9_.id
left outer join type_entity typeentity10_ on entite8_.type_entity_id=typeentity10_.id
left outer join jhi_user user11_ on fournisseu4_.modificateur_id=user11_.id
left outer join fournisseur fournisseu12_ on fournisseu4_.referentiel_id=fournisseu12_.id
left outer join jhi_user user13_ on fournisseu12_.createur_id=user13_.id
left outer join four_edi_format_fichier fouredifor14_ on fournisseu12_.edi_format_fichier_id=fouredifor14_.id
left outer join jhi_user user15_ on fouredifor14_.createur_id=user15_.id
left outer join jhi_user user16_ on fouredifor14_.modificateur_id=user16_.id
left outer join entite entite17_ on fournisseu12_.fabricant_id=entite17_.id
left outer join four_methode_acces_photo fourmethod18_ on fournisseu12_.methode_acces_photo_id=fourmethod18_.id
left outer join jhi_user user19_ on fourmethod18_.createur_id=user19_.id
left outer join jhi_user user20_ on fourmethod18_.modificateur_id=user20_.id
left outer join jhi_user user21_ on fournisseu12_.modificateur_id=user21_.id
left outer join pays pays22_ on fournisseu12_.pays_id=pays22_.id
left outer join jhi_user user23_ on referentie3_.createur_id=user23_.id
left outer join entite entite24_ on referentie3_.entite_id=entite24_.id
left outer join jhi_user user25_ on referentie3_.modificateur_id=user25_.id
left outer join referentiel referentie26_ on referentie3_.reference_mere_id=referentie26_.id
left outer join tva tva27_ on referentie26_.taxe1_id=tva27_.id
left outer join tva tva28_ on referentie26_.taxe2_id=tva28_.id
where referentie0_.reference_id=?我不明白为什么要发起这个请求...我的处理不会调用这个请求。此请求对Referentiel的所有@OneToMany字段执行left join
在@ManyToOne Metal金属上未执行任何请求
你有主意吗?
发布于 2019-12-10 19:41:38
默认情况下,在JPA中,如果获取两个表Jpa之间连接的字段,则通过运行查询来获取所有相关数据。
但是如果你想取消这个操作,你可以使用"lazy“参数来取消。一旦你请求数据,它就会获取数据。
@OneToMany(fetch = FetchType.LAZY)https://stackoverflow.com/questions/59266086
复制相似问题