2
我想dynamicaly創建我的春節,數據JPA項目使用JPA標準API返回,其中一個集合屬性包含
這裏,Specification
一定值的所有對象是我的時刻規格:
public class DemandsSpecs implements Specification<SvDem> {
private static final Logger LOG = LogManager.getLogger();
private final DemandsCritera critera;
private final List<Predicate> predicateList;
public DemandsSpecs(final DemandsCritera critera) {
this.critera = critera;
this.predicateList = new ArrayList<>();
}
@Override
public Predicate toPredicate(final Root<SvDem> root,
final CriteriaQuery<?> query,
final CriteriaBuilder cb) {
this.predicateList.add(cb.between(root.get(SvDem_.hdCreation), critera.getBegin(), critera.getEnd()));
if (critera.getSoc() != null) {
LOG.debug("socId {}", critera.getSoc());
this.predicateList.add(cb.equal(root.get(SvDem_.socId), critera.getSoc()));
}
if (critera.getManagementAct() != null) {
LOG.debug("actgesId {}", critera.getManagementAct());
this.predicateList.add(cb.equal(root.get(SvDem_.actgesId), critera.getManagementAct()));
}
if (critera.getStatus() != null) {
LOG.debug("statutId {}", critera.getStatus());
this.predicateList.add(cb.equal(root.get(SvDem_.statutId), critera.getStatus()));
}
if (!StringUtils.isBlank(critera.getId())) {
LOG.debug("id {}", critera.getId());
this.predicateList.add(cb.like(root.get(SvDem_.id), '%' + critera.getId() + '%'));
}
return query.where(cb.and(predicateList.toArray(new Predicate[predicateList.size()])))
.orderBy(cb.desc(root.get("hdCreation")))
.getRestriction();
}
}
該DemandsCritera
也有String
財產metadata
。
public class DemandsCritera implements Serializable {
private static final Long serialVersionUID = 1L;
private Date begin;
private Date end;
private RfActges managementAct;
private String metadata;
private RfStatut status;
private RfSoc soc;
private String id;
/* getters and setters */
}
SvDem有一個屬性svMetaCollection
其爲Collection<SvMeta>
。
@Entity
@Table(name = "sv_dem")
public class SvDem implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
private String id;
@Basic(optional = false)
@Column(name = "HD_CREATION")
@Temporal(TemporalType.TIMESTAMP)
private Date hdCreation;
@Lob
private String user;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "svDem")
@JsonManagedReference
private Collection<SvMeta> svMetaCollection;
@JoinColumn(name = "ACTGES_ID", referencedColumnName = "ID")
@ManyToOne(optional = false)
private RfActges actgesId;
@JoinColumn(name = "STATUT_ID", referencedColumnName = "ID")
@ManyToOne(optional = false)
private RfStatut statutId;
@JoinColumn(name = "SOC_ID", referencedColumnName = "ID")
@ManyToOne(optional = false)
private RfSoc socId;
/* getters, setters and other irrelevant properties */
}
的SvMeta對象有一個String
財產value
@Entity
@Table(name = "sv_meta")
public class SvMeta implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected SvMetaPK svMetaPK;
@Basic(optional = false)
@Lob
private String value;
@JoinColumn(name = "META_ID", referencedColumnName = "ID", insertable = false, updatable = false)
@ManyToOne(optional = false)
private RfMeta rfMeta;
@JoinColumn(name = "DEM_ID", referencedColumnName = "ID", insertable = false, updatable = false)
@ManyToOne(optional = false)
@JsonBackReference
private SvDem svDem;
}
我想回到所有SvDem
其中任何SvMeta
都有value
等於給DemandsCritera.metadata
。
我該如何做到這一點?