我有两个具有一对多关系的实体。我想获得所有实体 与一组另一个实体相关联的。这是我的课程:
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);
}
当我使用空元素集或单个元素集调用方法时,我没有错误。但是如果集合包含更多元素
我得到一个例外。 MySQL说Operand should contain 1 column(s)
。生成的空元素或单个元素的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,我该如何修复它?
答案 0 :(得分:4)
根据Spring Data spec,您必须将此方法定义为:
List<Instance> findByActionsIn(Collection<Action> actions);