Hibernate. Запрос на выборку дочерней сущности и нескольких полей основной
Появился такой вопрос: работая с hibernate 3.3.0 наткнулся на ситуацию, когда мне необходимо из двух таблиц, связанных one-to-many, взять из основной таблицы некоторое количество полей и все связанные записи из дочерней. Что б было понятнее приведу конкретный пример на двух сущностнях. Есть основная сущность Получатель "recipient":
@Entity
@Table(name = "recipient")
@JsonFilter(value = "recipientsFilter")
public class POJORecipient implements POJO {
private static final long serialVersionUID = 4436819032452218525L;
@Id
@Column
private long id;
@Version
@Column
private long version;
@Column(name = "client_id")
private long clientId;
@Column
private String inn;
@Column
private String name;
@Column(name = "rcpt_country_code")
private String rcptCountryCode;
@Column(name = "rcpt_passp_ser")
private String rcptPasspSer;
@Column(name = "rcpt_passp_num")
private String rcptPasspNum;
@OneToMany(mappedBy = "recipient", fetch = FetchType.LAZY)
@JsonManagedReference
private Set<POJORequisite> requisites = new HashSet<>();
public POJORecipient(){}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getVersion() {
return version;
}
public void setVersion(long version) {
this.version = version;
}
public long getClientId() {
return clientId;
}
public void setClientId(long clientId) {
this.clientId = clientId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInn() {
return inn;
}
public void setInn(String inn) {
this.inn = inn;
}
public String getRcptCountryCode() {
return rcptCountryCode;
}
public void setRcptCountryCode(String rcptCountryCode) {
this.rcptCountryCode = rcptCountryCode;
}
public String getRcptPasspSer() {
return rcptPasspSer;
}
public void setRcptPasspSer(String rcptPasspSer) {
this.rcptPasspSer = rcptPasspSer;
}
public String getRcptPasspNum() {
return rcptPasspNum;
}
public void setRcptPasspNum(String rcptPasspNum) {
this.rcptPasspNum = rcptPasspNum;
}
public Set<POJORequisite> getRequisites() {
return requisites;
}
public void setRequisites(Set<POJORequisite> requisites) {
this.requisites = requisites;
}
}
и дочерняя – реквизиты этого получателя, "requisites":
@Entity
@Table(name = "requisites")
public class POJORequisite implements POJO {
private static final long serialVersionUID = -35864567359179960L;
@Id
@Column
private long id;
@Version
@Column
private long version;
@Column
private String bic;
@Column
private String bill;
@Column
private String comments;
@Column
private String note;
@ManyToOne
@JoinColumn(name = "recipient_id")
@JsonBackReference
private POJORecipient recipient;
public POJORequisite(){}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getVersion() {
return version;
}
public void setVersion(long version) {
this.version = version;
}
public String getBic() {
return bic;
}
public void setBic(String bic) {
this.bic = bic;
}
public String getBill() {
return bill;
}
public void setBill(String bill) {
this.bill = bill;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public POJORecipient getRecipient() {
return recipient;
}
public void setRecipient(POJORecipient recipient) {
this.recipient = recipient;
}
}
И вот для примера я хочу выбрать из получателей только имя и все связанные реквизиты, тоесть на выходе должен получиться лист объектов класса POJORecipient, где у каждого объекта заполнены поле name и коллекция объектов POJORequisite. Я хочу: либо узнать как это сделать (или с помощью HQL, или с помощью Criteria API, но второй вариант предпочтительнее), либо узнать, что этого сделать невозможно в hibernate вообще, либо узнать, что эта возможность появилась в более поздних версиях, так же, очень желательно, с примером того, как это сделать. Над этим вопросом я бьюсь уже несколько месяцев и буду безмерно признателен за любую помощь, все уточнения и советы активно приветствуются. Заранее спасибо!!!