может быть другое решение, но для достижения этого вам нужно изменить класс Make следующим образом, вводя новое отношение (@OneToMany) с классом Model:
@Entity
@Table(name = "make")
@PrimaryKeyJoinColumn(name="make_id")
public class Make {
@Id
@Column(name = "make_id")
private String makeId;
@Column(name = "make_name")
private String makeName;
// ** introduced new relationship **
@OneToMany(mappedBy="make", fetch = FetchType.LAZY)
private List<Model> models;
@ManyToOne
@JoinColumn(name = "mfg_unit_id")
private MfgUnit mfgUnit;
// Getter and Setters
}
И сохраняйте класс Model.как есть:
@Entity
@Table(name = "model")
public class Model {
@Id
@Column(name = "model_id")
private String modelId;
// change the datatype as Date or similar Datatype
@Column(name = "model_creation_date")
private Date modelCreationDate;
@Column(name = "make_id")
private long makeId;
@ManyToOne
@JoinColumn(name = "make_id")
private Make make;
// Getter and Setters
}
Когда у вас есть связь с 'Model' из 'Make', вы можете выполнить следующий код, чтобы получить свой результат:
Calendar cal = Calendar.getInstance();
// today
Date toDate=cal.getTime();
cal.add( Calendar.DATE, -30 );
//date before 30 days
Date fromDate=cal.getTime();
Criteria criteria = session.createCriteria(Make.class , "m")
.createAlias("models", "s")
.add(Restrictions.between("s.modelCreationDate", fromDate, toDate))
// if the above condition dosen't give you exact result you may try following(2)
// try gt or lt ... as needed
//.add(Restrictions.ge("publicationDate", fromDate))
//.add(Restrictions.le("publicationDate", fromDate))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List<Make> ll2 = criteria.list();