春季数据CrudRepository findBy关系
我想选择任何具有新状态栏的Foo实体。春季数据CrudRepository findBy关系
这里是我的尝试:
@Entity
@Table(name = "FOO")
class Foo {
@Id
@Column(name = "ID")
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
@OneToMany
private Set<Bar> bars;
//...
}
public interface FooRepository extends CrudRepository<Foo, Long> {
@Query("select m from Foo f where f.bars.status = 'NEW' ")
public Page<Foo> findByBarStatus(Pageable pageable);
}
,但我得到:
org.hibernate.exception.SQLGrammarException: could not prepare statement
我也试着写连接语句代替:
select f from Foo f inner join f.bars b where b.status = 'NEW'
SELECT f FROM Foo AS f JOIN f.bars AS b WHERE b.status = 'NEW'
我觉得你缺少这样的东西
@OneToMany(mappedBy = "foo")
private Set<Bar> bars;
加入一对多关系有时可能会非常棘手。 (还有一个答案是正确的,你可以参考)
在这种情况下,你可以通过从Bar
侧查找相反(假设你有关系是双向的):
select bar.foo from Bar bar where bar.status = 'NEW'
其实我也失踪'@JoinColumn(name =“酒吧”)' – Benedictus
@Benedictus它不一定是“失踪”,因为Hibernate可以推断列名(虽然名字可能不是你想要的) –
那么它没”以任何其他方式为我工作 – Benedictus
您忘记'AS's – Snickers3192
'因为'不是强制性的。 –
@AbdullahKhan你只是吹我的脑海里。 – Snickers3192