0

私は冬眠するのが初めてで、基準を使用しようとしています。私は2つのテーブル、つまり主外部キーが実際に存在するテーブルから結果を取得することに固執しました。

Carpooler と SourceToDestinationDetails DTO があります。ユーザー検索データに基づいて、SourceToDestinationDetails を含む Carpooler オブジェクトを埋めたいのですが、取得できず、Criteria API を使用してそれを行う方法がわかりません。

public class Carpooler implements Serializable{

    private long carpoolerId;
    private String drivingLicenceNumber=null;
    private String userType=null;![enter image description here][1]
    private User user=null;
    private List<VehicleDetails> listOfVehicleDetails=null;
    private List<SourceToDestinationDetails> listOfSourceToDestinationDetails=null;
    private Date carpoolerCreationDate;
}

public class SourceToDestinationDetails implements Serializable{

    private static final long serialVersionUID = -7158985673279885525L;

    private long sourceToDestinationId;
    private String sourcePlace=null;
    private String destinationPlace=null;
    private String inBetweenPlaces=null;

    private String sourceLeavingTime=null;
}

ここに画像の説明を入力 ここに画像の説明を入力 これは私が書いたものです、

Criteria criteria1 = getSession().createCriteria(SourceToDestinationDetails.class);
criteria1.add(Restrictions.like("sourcePlace", "%" + from + "%"));
criteria1.add(Restrictions.like("destinationPlace", "%" + to + "%"));
List<SourceToDestinationDetails> listOfExactMatchCarpooler = criteria1.list();  

上記の Criteria API を使用して、SourceToDestinationDetails DTO レコードのみを取得していますが、Carpooler レコードも必要になりました。SourceToDestinationDetails テーブルで一致する Carpooler_id の Carpooler レコードを取得する方法がわかりません。

つまり、ユーザーが与える場合、

String from = "Bellandur";
    String to = "Silk Board";

結果はList<Carpooler>、一致するすべての SourceToDestinationDetails リストを内部に含むオブジェクトである必要があります。

4

1 に答える 1

1

Annotationsでそれを行うことができます。以下のように、 SourceToDestinationDetailsクラスで@OneToManyアノテーションを使用できます。

public class SourceToDestinationDetails implements Serializable{

    private static final long serialVersionUID = -7158985673279885525L;
    @Column
    private long sourceToDestinationId;
    @Column
    private String sourcePlace=null;
    @Column
    private String destinationPlace=null;
    @Column
    private String inBetweenPlaces=null;
    @Column
    private String sourceLeavingTime=null;

    @OneToMany(mappedBy = "carpooler_id", cascade = CascadeType.ALL)
    private Set<Carpooler> carpoolers;
}

HIBERNATE XMLを使用して同じことを達成したい場合。以下のように XML を宣言します。

  <set name="carpoolers" table="source_destination" 
            inverse="true" lazy="true" fetch="select">
        <key>
            <column name="carpooler_id" not-null="true" />
        </key>
        <one-to-many class="com.test.Carpooler" />
    </set>

その場合、モデルクラスは

public class SourceToDestinationDetails implements Serializable{

    private static final long serialVersionUID = -7158985673279885525L;

    private long sourceToDestinationId;
    private String sourcePlace=null;
    private String destinationPlace=null;
    private String inBetweenPlaces=null;

    private String sourceLeavingTime=null;
    private Set<StockDailyRecord> carpoolers = 
                new HashSet<StockDailyRecord>();
}

私は通常、醜い XML よりもアノテーションを好みます。

于 2012-12-25T05:21:33.840 に答える