【发布时间】:2022-01-17 07:02:49
【问题描述】:
我有这个实体:
@Entity
public class PlantArea {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_plantarea")
@SequenceGenerator(name = "seq_plantarea", allocationSize = 1)
@Column(nullable = false, updatable = false)
private Long id;
private String code;
private String name;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="plantid", nullable = false)
private Plant plant;
}
在回购中,我得到了所有像这样的植物区:
@Override
public List<PlantArea> getPlantAreas() {
return plantAreaRepository.findAll();
}
所以,没什么特别的。
对此我有两个问题:
-
Hibernate 触发两个查询:一个用于选择植物区域,另一个用于选择相关植物。我怎样才能避免这种情况,我怎样才能强制休眠只做一个查询?就像在 sql 中(伪):选择所有植物区域内连接植物。我想我必须写一些 jpql/hql,不管是什么查询?
-
使用简单的
findAll()查询植物区域会得到以下 json 结果:[ { “身份证”:1, “代码”:“122”, “名称”:“汽车”, “植物”: { “身份证”:1, “代码”:“130”, “位置”:“某个城市”, “公司”: { “身份证”:1, "name": "测试公司长名称", "shortName": "测试公司" } } } ]
如您所见,每家工厂也都有一家公司。所以,我得到了相关对象的完整链:植物 -> 植物 -> 公司。问题是,我怎样才能抑制 company 对象?基本上我需要这样的查询(伪sql):
select plantarea.*, plant.*, company.* from plantarea
inner join plant on plantarea.plant_id=plant.id
inner join company on plant.company_id=company.id
【问题讨论】:
标签: hibernate jpa spring-data-jpa spring-data