我有两个实体,没有主键或外键引用,但我需要有一个单向实体使用或提取关系实体。使用Spring数据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扩展了JPararePository、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);
}
};
}
我使用的是Spring data jpa,实现了Spring data jpa中的使用规范。有没有什么方法可以避免N+1迭代问题。我试过用一个而不是一个
为了避免n+1
问题,您必须获取CarPart
实例以及CarHistory
实体。有多种解决方案:
>
将CarHistory.CarPart
映射为Eager
(不是好的解决方案)
编写自定义查询并急切地提取CarHistory.Carpart
,例如from CarHistory.ch JOIN fetch ch.Carpart where...
这篇文章解释了如何初始化惰性关联以及何时使用它们
你竟任着刚硬不悔改的心,为自己积蓄忿怒,以致神震怒,显他公义审判的日子来到。他必照各人的行为报应各人。凡恒心行善,寻求荣耀、尊贵和不能朽坏之福的,就以永生报应他们;惟有结党不顺从真理,反顺从不义的,就以忿怒、恼恨报应他们。(ROMANS 2:7-8) 迭代 Bill正在介绍他的项目,嘴里不断蹦出“loop、iterate、traversal、recursion”这些单词,夹杂在汉语汇总。旁边的小白
什么叫做迭代? 比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历这个 list 或 tuple ,这种遍历就是迭代。 可是,Python 的 for 循环抽象程度要高于 Java 的 for 循环的,为什么这么说呢?因为 Python 的 for 循环不仅可以用在 list
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。 在Python中,迭代是通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码: for (i=0; i<list.length; i++) { n = list[i]; } 可以看出,Python的
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。 在Python中,迭代是通过for ... in来完成的,而很多语言比如C语言,迭代list是通过下标完成的,比如Java代码: for (i=0; i<list.length; i++) { n = list[i]; } 可以看出,Python的for循
null 一些示例输出数据: *编辑:工作的scala代码行:
我想在列表中从0到结尾无限迭代,但在下一个循环中,我想从1开始到结尾加0,下一个循环将从2开始到结尾加0,1,直到最后一个项目,它将再次从0开始到结尾。 这是我的代码: 这就是我目前提出的解决方案。这远非完美。 我想要的结果是: 等等