2017-11-23 4 views
0
public class Hotel{ 
    @ManyToOne(optional = false) 
    @NotNull 
    @JoinColumn(name = "hotel_city", referencedColumnName = "city_id") 
    private City city; 
} 

public class City{ 
    @Column(name = "public_id", updatable = false, unique = true) 
    @NotEmpty 
    private String publicId; 
} 

私は都市のpublicIdが指定された文字列と等しいすべてのホテルを検索したいと思います。私はのpublicIdは、与えられた文字列に等しいです街テーブルの単方向多対一のスプリングデータjpa指定

  1. 選択都市に上記のコードを使用してやろうとしている

    public Predicate toPredicate(Root<Hotel> root, CriteriaQuery<?> query, CriteriaBuilder cb) { 
           Subquery<City> subquery = query.subquery(City.class); 
           Root<City> subRoot = subquery.from(City.class); 
           Predicate cityIdPredicate = cb.equal(subRoot.get("publicId"), criteria.getValue().toString()); 
    
           return cb.equal(root.get("city"), cityIdPredicate); 
    } 
    

  2. ホテルの都市を取得し、#1の結果と比較してください。

これは間違っているようです。仕様を使用したのは初めてのことですが、ヒントがあれば助かります。おかげさまで

答えて

0

LOL、私は最も簡単な解決策を見つけました。

 return cb.equal(root.get("city").get("publicId"), criteria.getValue().toString());