0

第9章のセクション9.2にある例に従って、休止状態を使用してクエリを作成しようとしています

私の試みとの違いは、Spring MVC 3.0 を使用していることです。これが、私が作成したメソッドと一緒に私の Address クラスです。

@RooJavaBean
@RooToString
@RooEntity
@RooJson
public class Address {

    @NotNull
    @Size(min = 1)
    private String street1;

    @Size(max = 100)
    private String street2;

    private String postalcode;

    private String zipcode;

    @NotNull
    @ManyToOne
    private City city;

    @NotNull
    @ManyToOne
    private Country country;

    @ManyToOne
    private AddressType addressType;

    @Transient
    public static List<Tuple> jqgridAddresses(Long pID){
        CriteriaBuilder builder = Address.entityManager().getCriteriaBuilder();
        CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
        Root<Address> addressRoot = criteria.from( Address.class );
        criteria.multiselect(addressRoot.get("id"), addressRoot.get("street1"), addressRoot.get("street2"));
        criteria.where(builder.equal(addressRoot.<Set<Long>>get("id"), pID));
        return Address.entityManager().createQuery( criteria ).getResultList();
    }
}

上記で呼び出されたメソッドjqgridAddressesがフォーカスです。Path idPath = addressRoot.get( Address_.id );のようなことを言うと、「パス」を使用しないことにしました。ドキュメントのセクション 9.2 のように、PathAddress_.idのものはコンパイル エラーを生成します。

上記のメソッドはTuple、何かを含む必要がある場合でもサイズがゼロであるため、タイプの空のリストを返します。これは、クエリが失敗したことを示しています。誰かが私にアドバイスしてもらえますか。

4

1 に答える 1

1

OKなので、プロジェクトに固有のロジックを少し調整しましたが、次のアプローチは完全に機能しました。それが困っている人を喜ばせることを願っています!

@Transient
public static List<Tuple> jqgridPersons(Boolean isStudent, String column, String orderType, int limitStart, int limitAmount){
    CriteriaBuilder builder = Person.entityManager().getCriteriaBuilder();
    CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
    Root<Person> personRoot = criteria.from(Person.class );
    criteria.select(builder.tuple(personRoot.get("id"), personRoot.get("firstName"), personRoot.get("lastName"), personRoot.get("dateOfBirth"), personRoot.get("gender"), personRoot.get("maritalStatus"))); 
    criteria.where(builder.equal( personRoot.get("isStudent"), true));
    if(orderType.equals("desc")){
        criteria.orderBy(builder.desc(personRoot.get(column)));
    }else{
        criteria.orderBy(builder.asc(personRoot.get(column)));
    }
    return Address.entityManager().createQuery( criteria ).setFirstResult(limitStart).setMaxResults(limitAmount).getResultList(); 
}
于 2012-05-14T16:45:13.920 に答える