Сначала вы должны создать сущность для таблиц.мы предполагаем, что State является субъектом для tbl_state, а Country является субъектом для tbl_country.
Страна Entity:
@Entity
@Table(name = "tbl_country")
public class Country {
private Integer countryId;
@Id
@Column(name="country_id")
public String getCountryId(){
return countryId;
}
}
State Entity:
@Entity
@Table(name = "tbl_state")
public class State {
private Integer stateId;
private String stateName;
private Country country;
@Id
@Column(name="state_id")
public String getStateId(){
return stateId;
}
@Column(name="state_name")
public String getStateName(){
return stateName;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="country_id")
public Country getCountry(){
return country;
}
}
Код критерия:
Criteria stateCriteria = session.createCriteria(State.class);
Criteria countryCriteria = stateCriteria.createCriteria("country");
stateCriteria.addOrder(Order.desc("stateName"));
stateCriteria.setFirstResult(pagesize * pagenum);
stateCriteria.setMaxResults(pagesize);
List results = stateCriteria.list();
для пользовательского результата необходимо создать класс dto. Например, StateDto:
public class StateDto {
private String stateName;
private String countryName;
public String getStateName() {
return stateName;
}
public void setStateName(String stateName) {
this.stateName = stateName;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
}
Тогда ваш код критерия можетбыть похожим на приведенный ниже код.
Criteria stateCriteria = session.createCriteria(State.class);
Criteria countryCriteria = stateCriteria.createCriteria("country");
stateCriteria.addOrder(Order.desc("stateName"));
stateCriteria.setFirstResult(pagesize * pagenum);
stateCriteria.setMaxResults(pagesize);
stateCriteria.setProjection(Projections.projectionList()
.add(Projections.property("stateName").as("stateName"))
.add(Projections.property("country.name").as("countryName")));
List<StateDto> results = stateCriteria.list();