0
我有兩個具有一對多關係的實體。我想獲得與其他實體集合相關的所有實體 。這是我的課:爲什麼Spring Data JPA + Hibernate生成不正確的SQL?
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,我該如何解決它?
你100%肯定春天數據JPA是*應該*支持的集合作爲參數,而實際上是定義的行爲嗎? – EpicPandaForce
您是否嘗試使用@Query(「select ...」)標記自己定義查詢? http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query – Nils
@Ajan已經提供了正確的答案。我在查詢方法的末尾錯過了「In」。 – stevecross