Возможно объединение трех таблиц в спящем режиме. У меня была похожая проблема, когда (в вашем примере) ShippingOption имел отношение ManyToOne с Distributor и ShippingMethod.
Distributor (d_id, name)
ShippingMethod (sm_id, name, description)
ShippingOption (sp_id, d_id, sm_id, name, default, active, cost, availability, foreign key(d_id), foreign key(sm_id))
Полагаю, так выглядит ваш стол. Может быть, я отвечу на проблему, которую я решил, и вы можете выяснить свою. Мое пижо выглядело так:
@Entity
@Table(name = "shipping_option")
public class ShippingOption {
//..all other columns to retrive
@JoinColumn(name = "d_id", referencedColumnName = "d_id")
@ManyToOne
private ShippingMethod shippingMethod
@JoinColumn(name = "sm_id", referencedColumnName = "sm_id")
@ManyToOne
private Ditributor distributor; //Make sure you have Distributor and ShippingMethod Pojos defined
public ShippingMethod getShippingMethod() {
return this.shippingMethod;
}
public void setShippingMethod(ShippingMethod sMethod) {
this.shippingMethod = sMethod;
}
// Getter setter for Distributor and other columns as well goes here.
}
Мне нужно получить все данные о доставке данного имени Дистрибьютора. MySQL запрос будет что-то, связанное с этим
select d.d_id, d.name, sm.name, so.name, so.default from Distributor as d, ShippingMethod as sm, ShippingOption as so where d.d_id = so.d_id and so.sm_id = so.sm_id and d.name = 'FedEx';
В реализации спящего режима,
public List<ShippingOption> getAllShipingOptionByDistributor(final String distName) {
//....
return List<ShippingOption> session.crateCriteria(ShippingOption.class)
.createAlias("distributor", "distributor") //distributor is the member of ShippingOption of type Distributor, see the above pojo definition.
.add(Restrictions.eq("distributor.name", distName);
.createAlias("shippingMethod", "sm")
.list();
Вот так, я бы получил список ShippingOption, в котором каждый имел бы своего соответствующего Дистрибьютора и ShippingMethod.