Начну сначала, есть таблица в которой, есть исторические данные по компаниям. В этой таблице есть start_date, и задача такова, что нужно фильтровать все последние по start_date записи. Не понял, как можно это сделать через JPQL, и в итоге выполнил все в нативном запросе через EntityManager
Сам запрос
SELECT start_date, end_date, do3.rfo_id, do3.pm_id, do3.rm_id, do3.id, do3.category, do3.enlistment_flag, do3.is_constaccompan, do3.lang, do3.period, pass_method, do3.agreement_kg, do3.work_state, agreement_kind, dt_consult, scheme, do3.upd_kind, dt_confirm, dt_consult_fact, do3.enroll1_state, enroll1_plan_dt, enroll1_fact_dt, stuff, do3.head_id FROM (
SELECT *,
RANK() OVER (PARTITION BY rfo_id ORDER BY start_date DESC) dest_rank
FROM dzp_org_main dom
) do3
join dzp_org do2 on do3.rfo_id = do2.rfo_id
join dzp_upd_kind duk on do3.upd_kind = duk.upd_kind
join dzp_work_state dws on dws.work_state = do3.work_state
join dzp_pm dp on dp.id = do3.pm_id
join dzp_period dp2 on dp2.period = do3.period
join dzp_agreement_kg dak on dak.agreement_kg = do3.agreement_kg
join dzp_enroll1_state des on des.enroll1_state = do3.enroll1_state
join dzp_lang dl
where do3.dest_rank = 1
В сервисе беру список записей, и через setItem CollectionContainer устанавливаю записи, но в итоге выходит такая ошибка
Ошибка
Есть две сущности, DzpOrgMain(Является историчной) и DzpOrg(Хранит информацию о компаниях), в представлении DzpOrgMain есть два атрибута, ссылающегося на DzpOrg rfo и head.
Основная сущность
DzpOrgMain
Table(name = "dzp_org_main")
Entity(name = "untitled1_DzpOrgMain")
public class DzpOrgMain extends BaseGenericIdEntity<Double> {
private static final long serialVersionUID = -6262400442403902693L;
Id
Column(name = "id", nullable = false)
NotNull
protected Double c_id;
Override
public Double getId() {
return c_id;
}
@Override
public void setId(Double id) {
this.c_id = id;
}
@JoinColumn(name = "agreement_kg")
@ManyToOne(fetch = FetchType.LAZY)
private DzpAgreementKg agreementKg;
@JoinColumn(name = "agreement_kind")
@ManyToOne(fetch = FetchType.LAZY)
private DzpAgreementKind agreementKind;
@JoinColumn(name = "category")
@ManyToOne(fetch = FetchType.LAZY)
private DzpCategory category;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dt_confirm")
private Date dtConfirm;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dt_consult")
private Date dtConsult;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dt_consult_fact")
private Date dtConsultFact;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "end_date")
private Date endDate;
@Column(name = "enlistment_flag")
private Double enlistmentFlag;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "enroll1_fact_dt")
private Date enroll1FactDt;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "enroll1_plan_dt")
private Date enroll1PlanDt;
@JoinColumn(name = "enroll1_state")
@ManyToOne(fetch = FetchType.LAZY)
private DzpEnrollState enroll1State;
@JoinColumn(name = "head_id")
@ManyToOne(fetch = FetchType.LAZY)
private DzpOrg head;
@Column(name = "is_constaccompan", length = 50)
private String isConstaccompan;
@JoinColumn(name = "lang")
@ManyToOne(fetch = FetchType.LAZY)
private DzpLang lang;
@JoinColumn(name = "pass_method")
@ManyToOne(fetch = FetchType.LAZY)
private DzpPassMethod passMethod;
@JoinColumn(name = "period")
@ManyToOne(fetch = FetchType.LAZY)
private DzpPeriod period;
@JoinColumn(name = "pm_id")
@ManyToOne(fetch = FetchType.LAZY)
private DzpPm pm;
@JoinColumn(name = "rfo_id")
@ManyToOne(fetch = FetchType.LAZY)
private DzpOrg rfo;
@JoinColumn(name = "rm_id")
@ManyToOne(fetch = FetchType.LAZY)
private DzpRm rm;
@JoinColumn(name = "scheme")
@ManyToOne(fetch = FetchType.LAZY)
private DzpScheme scheme;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "start_date")
private Date startDate;
@Column(name = "stuff", precision = 131089, scale = 0)
private BigDecimal stuff;
@JoinColumn(name = "upd_kind")
@ManyToOne(fetch = FetchType.LAZY)
private DzpUpdKind updKind;
@JoinColumn(name = "work_state")
@ManyToOne(fetch = FetchType.LAZY)
private DzpWorkState workState;
public void setPm(DzpPm pm) {
this.pm = pm;
}
public DzpPm getPm() {
return pm;
}
public void setRfo(DzpOrg rfo) {
this.rfo = rfo;
}
public DzpOrg getRfo() {
return rfo;
}
public void setRm(DzpRm rm) {
this.rm = rm;
}
public DzpRm getRm() {
return rm;
}
public void setScheme(DzpScheme scheme) {
this.scheme = scheme;
}
public DzpScheme getScheme() {
return scheme;
}
public void setUpdKind(DzpUpdKind updKind) {
this.updKind = updKind;
}
public DzpUpdKind getUpdKind() {
return updKind;
}
public void setWorkState(DzpWorkState workState) {
this.workState = workState;
}
public DzpWorkState getWorkState() {
return workState;
}
public void setPeriod(DzpPeriod period) {
this.period = period;
}
public DzpPeriod getPeriod() {
return period;
}
public void setPassMethod(DzpPassMethod passMethod) {
this.passMethod = passMethod;
}
public DzpPassMethod getPassMethod() {
return passMethod;
}
public void setLang(DzpLang lang) {
this.lang = lang;
}
public DzpLang getLang() {
return lang;
}
public void setHead(DzpOrg head) {
this.head = head;
}
public DzpOrg getHead() {
return head;
}
public void setEnroll1State(DzpEnrollState enroll1State) {
this.enroll1State = enroll1State;
}
public DzpEnrollState getEnroll1State() {
return enroll1State;
}
public void setCategory(DzpCategory category) {
this.category = category;
}
public DzpCategory getCategory() {
return category;
}
public void setAgreementKind(DzpAgreementKind agreementKind) {
this.agreementKind = agreementKind;
}
public DzpAgreementKind getAgreementKind() {
return agreementKind;
}
public void setAgreementKg(DzpAgreementKg agreementKg) {
this.agreementKg = agreementKg;
}
public DzpAgreementKg getAgreementKg() {
return agreementKg;
}
public BigDecimal getStuff() {
return stuff;
}
public void setStuff(BigDecimal stuff) {
this.stuff = stuff;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public String getIsConstaccompan() {
return isConstaccompan;
}
public void setIsConstaccompan(String isConstaccompan) {
this.isConstaccompan = isConstaccompan;
}
public Date getEnroll1PlanDt() {
return enroll1PlanDt;
}
public void setEnroll1PlanDt(Date enroll1PlanDt) {
this.enroll1PlanDt = enroll1PlanDt;
}
public Date getEnroll1FactDt() {
return enroll1FactDt;
}
public void setEnroll1FactDt(Date enroll1FactDt) {
this.enroll1FactDt = enroll1FactDt;
}
public Double getEnlistmentFlag() {
return enlistmentFlag;
}
public void setEnlistmentFlag(Double enlistmentFlag) {
this.enlistmentFlag = enlistmentFlag;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public Date getDtConsultFact() {
return dtConsultFact;
}
public void setDtConsultFact(Date dtConsultFact) {
this.dtConsultFact = dtConsultFact;
}
public Date getDtConsult() {
return dtConsult;
}
public void setDtConsult(Date dtConsult) {
this.dtConsult = dtConsult;
}
public Date getDtConfirm() {
return dtConfirm;
}
public void setDtConfirm(Date dtConfirm) {
this.dtConfirm = dtConfirm;
}
}
DzpOrg
@Table(name = "dzp_org")
@Entity(name = "untitled1_DzpOrg")
@NamePattern("%s %s|bin,orgName")
public class DzpOrg extends BaseGenericIdEntity<Double> {
private static final long serialVersionUID = -5311387108462909819L;
@Id
@Column(name = "rfo_id", nullable = false)
@NotNull
protected Double rfo_id;
@Column(name = "bin", length = 100)
private String bin;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dateclose")
private Date dateclose;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "datesign")
private Date datesign;
@Column(name = "head")
private Double head;
@Column(name = "head_id")
private Double head1;
@Column(name = "org_name", length = 3000)
private String orgName;
@Column(name = "region", length = 200)
private String region;
@Column(name = "town", length = 2000)
private String town;
public String getTown() {
return town;
}
public void setTown(String town) {
this.town = town;
}
@Override
public Double getId() {
return rfo_id;
}
@Override
public void setId(Double id) {
this.rfo_id = id;
}
public Double getRfo_id() {
return rfo_id;
}
public void setRfo_id(Double rfo_id) {
this.rfo_id = rfo_id;
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
public Double getHead1() {
return head1;
}
public void setHead1(Double head1) {
this.head1 = head1;
}
public Double getHead() {
return head;
}
public void setHead(Double head) {
this.head = head;
}
public Date getDatesign() {
return datesign;
}
public void setDatesign(Date datesign) {
this.datesign = datesign;
}
public Date getDateclose() {
return dateclose;
}
public void setDateclose(Date dateclose) {
this.dateclose = dateclose;
}
public String getBin() {
return bin;
}
public void setBin(String bin) {
this.bin = bin;
}
}
Остальные атрибуты подтягиваются, а rfo нет. Подскажите в чем проблема, а также можно будет этот запрос трансформировать в JPQL