SourceToDestinationDetails

SourceToDestinationDetails

我是新来的冬眠者,尝试使用Criteria。
我坚持从2表中获取结果,即实际存在主外键的表。

我有Carpooler和SourceToDestinationDetails DTO,现在基于用户搜索数据,我想填充Carpooler对象,其中包含SourceToDestinationDetails,但是我没有得到它,也不知道如何使用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列表。

最佳答案

您可以通过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。

09-30 14:17