我正在尝试使用JPA查询使用以下查询从DB中获取数据:
from Candidate c where c.id = :id
其中,id=candidate_id(主表的主键)。
该查询也从其所有关联表中获取数据,而我的要求是仅从其2个关联表中获取数据。因为第三个表包含大量JSON数据,这会降低上述查询的响应时间。
我尝试使用JOIN,获取父级的JOIN及其2个关联表,但它不起作用。我还在研究如何在获取候选数据时只跳过一列数据(带有大量JSON的第3个表的列),但运气不好。
可以使用JPA查询实现吗?或者我需要尝试其他方法?我可以使用repo一次性保存候选表及其所有相关表数据。保存(候选),但不想获取其中一个相关表数据。
这就是我在spry-boot中建立关联的方式:
候选实体:
@OneToOne(cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
mappedBy = "candidate")
@JsonManagedReference
private Address address;
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
mappedBy = "candidate")
@JsonManagedReference
private Set<Skills> skills= new HashSet<>();
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
mappedBy = "candidate")
@JsonManagedReference
private Set<Prefrence> prefrences = new HashSet<>();
地址实体:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "candidate_id")
@JsonBackReference
private Candidate candidate;
技能实体:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "candidate_id")
@JsonBackReference
private Candidate candidate;
//rest of the fields
优惠实体:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "candidate_id")
@JsonBackReference
private Candidate candidate;
//rest of the fields
使用candidateRepo时,我不想获取首选项实体数据。findById(id)在附在图中的已获取候选项中应始终为null
这里需要的是DTO,我认为这是Blaze持久性实体视图的完美用例。
我创建了这个库,允许JPA模型和自定义接口或抽象类定义模型之间的轻松映射,就像类固醇上的Spring数据投影一样。这个想法是,您可以按照自己喜欢的方式定义目标结构(域模型),并通过JPQL表达式将属性(getter)映射到实体模型。
使用Blaze Persistence实体视图,用例的DTO模型可以如下所示:
@EntityView(Candidate.class)
public interface CandidateDto {
@IdMapping
Long getId();
String getName();
AddressDto getAddress();
Set<SkillsDto> getSkills();
@EntityView(Address.class)
interface AddressDto {
@IdMapping
Long getId();
String getName();
}
@EntityView(Skills.class)
interface SkillsDto {
@IdMapping
Long getId();
String getName();
}
}
查询是将实体视图应用于查询的问题,最简单的就是按id进行查询。
<代码>候选a=entityViewManager。find(entityManager,CandidateDto.class,id)
Spring Data集成允许您使用它几乎像Spring数据投影:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features
Page<CandidateDto> findAll(Pageable pageable);
最好的部分是,它只会获取实际需要的状态!
问题内容: 我正在尝试一次从三个表中检索数据。这些表如下所示: 类别 讯息 评论 我想要得到的是1条消息(因为我有一个基于id的子句),3个类别(因为有3个类别链接到消息)和2条注释(因为有2条注释链接到消息)。 我正在尝试使用以下查询来检索数据: 但是,当运行此查询时,我得到6个结果: 在我预期结果如下的地方: 只有三行,我应该能够获取所有需要的数据。这有可能吗?我做错了吗?? 问题答案: 如评
我想这样写一个hql 因为我是新手,请帮帮我
我选择两个id列,但指定错误: 一些代码: 如何修复错误,我做错了什么?
问题内容: 我正在选择两个id列,但指定了错误: 一些代码: 如何解决错误,我在做什么错? 问题答案: 使用常规而不是(顺便说一句,默认情况下): 正如错误消息告诉您的那样,在这里没有意义,因为它是一种性能提示,会迫使人们急切加载收藏。
我去研究了关于JPA2.1规范的信息,这就是我发现的: 用于联接的联接条件来自映射的联接列。这意味着JPQL用户通常不必知道每个关系是如何连接的。在某些情况下,需要在连接条件中附加附加条件,通常是在外部连接的情况下。这可以通过ON子句来实现。ON子句在JPA2.1规范中定义,某些JPA提供程序可能支持ON子句。EclipseLink:Hibernate:TopLink-支持ON子句。 需要注意的是