【发布时间】:2017-10-30 22:56:33
【问题描述】:
我有两个没有主键或外键引用的实体,但我需要有单向实体才能使用或提取关系实体。 使用 Spring Data jpa。
以下是实体类:
@Entity
@Table(name="CAR_PARTS")
Class CarParts {
@id
@Column(name="PART_ID")
private Long id;
@Column(name="PART_NAME")
private String partName
}
@Entity
@Table(name="CAR_HISTORY")
Class CarHistory {
@id
@Column(name="CAR_HIST_ID")
private Long id;
@Column(name="PART_NAME")
private String part;
@ManyToOne(fetch=FetchType.lazy,optional=false)
@JoinColumn(name="PART_NAME",referencedColumnName="PART_NAME",insertable=false,updatable=false)
private CarPart carpart;
@column(name="SUBMIT_DATE")
private Date submitedDate;
}
DAO 类:
公共接口 CarHistoryDAO 扩展 JpaRepository,JpaSpecificationExecutor { }
服务等级:
public class CarhistoryServiceImpl {
@Autowired
private CarHistoryDAo carHistoryDAO;
public List<CarHistory> findCarHistory(Date startDate, Date endDate) {
List<CarHistory> hists =
carhistoryDAO.findAll(where(historyBySubmitedDate(startDate,endDate)));
}
public static Specification<CarHistory> historyBySubmitedDate(
final Date startDate, final Date endDate) {
return new Specification<CarHistory>() {
@Override
public Predicate toPredicate(Root<CarHistory> variableRoot,
CriteriaQuery<?> q, CriteriaBuilder cb) {
Predicate p1 = cb.between(
variableRoot.<Date> get("submitedDate"),
DateUtils.truncate(startDate, Calendar.DAY_OF_MONTH),
DateUtils.ceiling(endDate, Calendar.DAY_OF_MONTH));
return cb.and(p1);
}
};
}
通过上述关系,当获取 CarHistory 实体时,我将获得 Carpart 实体的 n+1 次迭代,
我正在使用 Spring data jpa,实现为在 spring data jpa 中使用规范。 有什么办法可以避免 n+1 迭代问题。 我尝试使用 onetoone 而不是 manytoone
【问题讨论】:
-
您使用哪种存储库方法进行检索?还是习惯。请补充一下
-
更新了 dao 和服务
标签: hibernate jpa spring-data-jpa