gpt4 book ai didi

java - 如何使用 JPA 和 Join 优化请求?

转载 作者:行者123 更新时间:2023-12-01 19:30:06 25 4
gpt4 key购买 nike

我想优化搜索请求的处理

我有一个主要对象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;

在我的治疗中,我确实要求获得符合标准的所有引用。然后我遍历每个事件以完成数据

例如,对于每个 Referentiel 对象,我使用 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 字段上进行左连接

未对 @ManyToOne Metal 金属提出请求

你有什么想法吗?

最佳答案

在 JPA 中默认情况下,如果您获取两个表之间连接的字段,Jpa 将通过运行查询获取所有相关数据。

但是如果你想取消这个操作,你可以使用“lazy”参数来完成。一旦您请求,它将获取数据。

@OneToMany(fetch = FetchType.LAZY)

关于java - 如何使用 JPA 和 Join 优化请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com