gpt4 book ai didi

java - 为什么 Spring Data JPA + Hibernate 生成不正确的 SQL?

转载 作者:行者123 更新时间:2023-12-01 18:14:05 24 4
gpt4 key购买 nike

我有两个具有一对多关系的实体。我想获取所有实体与一组其他实体相关联。这是我的类(class):

public class Instance {

@Id
@GeneratedValue
private long id;

@OneToMany(mappedBy = "instance")
private Set<Action> actions = new HashSet<>();

}

public class Action {

@Id
@GeneratedValue
private long id;

@ManyToOne
@JoinColumn(name = "instance_id")
private Instance instance;

}

此外,我还有以下存储库:

public interface InstanceRepository extends JpaRepository<Instance, Long> {

List<Instance> findByActions(Set<Action> actions);

}

当我使用空或单个元素集调用该方法时,没有收到任何错误。但如果集合包含更多元素我有一个异常(exception)。 MySQL 表示操作数应包含 1 列。为空或单个元素生成的 SQL套是

select instance0_.id as id1_3_
from instance instance0_
left outer join action actions1_
on instance0_.id=actions1_.instance_id
where actions1_.id=?

以及其他套装

select instance0_.id as id1_3_
from instance instance0_
left outer join action actions1_
on instance0_.id=actions1_.instance_id
where actions1_.id=(?, ?, ?, ...)

这显然是错误的,应该是这样的

select instance0_.id as id1_3_
from instance instance0_
left outer join action actions1_
on instance0_.id=actions1_.instance_id
where actions1_.id in (?, ?, ?, ...)

为什么 Hibernate 会生成此 SQL 以及如何修复它?

最佳答案

根据Spring数据spec您必须将此方法定义为:

List<Instance> findByActionsIn(Collection<Action> actions);

关于java - 为什么 Spring Data JPA + Hibernate 生成不正确的 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778932/

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