2017-07-31 10 views
0

新しいステータスのバーを持つすべての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' 

答えて

1
SELECT f FROM Foo AS f JOIN f.bars AS b WHERE b.status = 'NEW' 
+0

「ASの – Snickers3192

+0

」は必須ではありません。 –

+2

@AbdullahKhanあなたはちょうど私の心を吹いた。 – Snickers3192

1

私はあなたがいると思いますこのようなものが見つからない

@OneToMany(mappedBy = "foo") 
private Set<Bar> bars; 
1

1対多の関係のための参加は、時には厄介なことがあります。

この場合、Bar側を参照して、逆方向にすることができます(双方向の関係があると仮定します)。

select bar.foo from Bar bar where bar.status = 'NEW' 
+0

実際には、@JoinColumn(name = "Bar") ' – Benedictus

+0

@Benedictusもありませんでした。Hibernateはカラム名を推測することができるので、必ずしも"欠けている "わけではありません(名前はあなたが望むものではないかもしれません)。 –

+0

まあ、他の方法で私のために働く – Benedictus

関連する問題