JPA 2.0 Criteria API (Hibernate 実装を使用) を使用して、一連のパターンで定義されたアクセサリを所有する車を選択しようとしています。
私のコードを見てください。私がやろうとしていることを理解していただけると思います。
エンティティ:
@Entity
@Table(name = "CARS")
public class Car implements Serializable {
// .. Other fields
// {{ accessories
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "CARS_ACCESSORIES", joinColumns = @JoinColumn(name = "CARID"))
@Column(name = "ACCESSORY", length = 25)
private Set<String> accessories;
パターンを持つアクセサリを所有するすべての車を見つけるための Car クラスのリポジトリ/サービス メソッド:
public List<Car> findByAccessoryCriteria(Set<String> accessoriesCriteria) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Car> cq = cb.createQuery(Car.class);
Root<Car> car = cq.from(Car.class);
List<Predicate> criteria = new ArrayList<Predicate>();
if(accessoriesCriteria != null) {
for(String accessory : accessoriesCriteria) {
if(accessory.contains("%") {
// TODO: Select all Cars that contains an accessory which match
// accessory pattern.
} else {
// TODO: Select all Cars that contains an accessory which is
// equal to accessory pattern.
}
// TODO: Note that if a Car NOT owns an accessory which match or is equal to a
// the pattern, the Car shall NOT be selected.
}
}
cq.select(car).where(criteria.toArray(new Predicate[criteria.size()]));
TypedQuery<Car> query = em.createQuery(cq);
List <Car> cars= query.getResultList();
return cars;
}
したがって、車 A が次の付属品を所有する場合: 「付属品 XYZ」、「付属品 AAA」、および車 B が次の「付属品 XYZ」を所有し、基準が Set = 「付属品%」である場合、車 A と車 B の両方がただし、基準が Set = "Accessory XYZ", "Accessory AAA" の場合、Car A のみが選択されます。
この select ステートメントを完成させるのを手伝ってくれませんか? 基準 API と Hibernate フレームワークを使用する必要があることに注意してください。
よろしくお願いします