2017-07-20 4 views
6

これは動作しませんが、私が達成したいクエリです基準ビルダーグループによるカウントを有する

public class RoomEntity { 
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE) 
    @Column(name = "id", nullable = false, unique = true) 
    private Integer id; 

    @OneToMany(mappedBy = "roomEntity", cascade = CascadeType.ALL) 
    private Collection<CalendarEntity> calendarEntities; 
} 

My CalendarEntity:

public class CalendarEntity { 

@EmbeddedId 
private CalendarId calendarId; 

@Basic 
@Column(name = "available", nullable = false) 
private Boolean available; 

@ManyToOne 
@JoinColumn(name = "room_id", referencedColumnName = "id", insertable = false, updatable = false) 
private RoomEntity roomEntity; 
} 

マイCalendarEntity組み込みID:

@Embeddable 
public class CalendarId implements Serializable { 

    @Column(name= "date", nullable = false) 
    private Date date; 

    @Column(name = "room_id", nullable = false) 
    private Integer room_id; 
} 

すべてが、カウントを持つことによって、グループまで良いです。私はこれを実行すると、私は以下のコードでクエリを印刷するときは、GROUPBY /持つがあります:

if (hasPredicates) 
      q.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))); 
final TypedQuery<RoomEntity> TQ = manager.createQuery(q); 
TQ.setFirstResult(filter.getStart()); 
TQ.setMaxResults(filter.getSize()); 
System.out.println("\n\nQuery:\n" + +Q.unwrap(JpaQuery.class).getDatabaseQuery().getSQLString() + "\n\n\n"); 

最後の問合せでは、私が欲しいものではありません、それはしてグループを実装し、カウントを持つん。

UPDATE:

SELECT t1.id, t1.bathrooms, t1.bedrooms, t1.beds, t1.description, t1.exta_person_price, t1.house_rules, t1.max_people, t1.min_overnights, t1.neightborhood, t1.overnight_price, t1.square_meters, t1.title, t1.transport, t1.room_host, t1.room_location, t1.room_type_id FROM CALENDARENTITY t0, ROOMENTITY t1 WHERE (((t0.available = ?) AND (t0.date BETWEEN ? AND ?)) AND ((t0.room_id = t1.id) AND (t0.room_id = t1.id))) ORDER BY t1.overnight_price ASC 

それは、グループを欠落していると、カウントを持っている: これは私が今取得していますクエリです!

+0

予想される結果やエラーの情報を追加してください。 –

+0

私が期待しているのは、トップクエリを作成することですが、最終的に何が作成されているのは、2つの最後の行でグループ化され、カウントを持つトップクエリです。 – peterthunder

+0

エンティティを適切に作成したかどうかを、適切な注釈を使用して大量のコードを書く必要がないかどうか確認しましたか?また、作成しようとしているクエリーを検証します。同じジョブをよりクリーンな方法で実行するように簡単に変更できます。 –

答えて

5

複数選択を使用した後でクエリが機能しました。

Q.multiselect(fromRooms);