Как преобразовать запрос на присоединение к MySQL, используя критерии в спящем режиме - PullRequest
0 голосов
/ 19 марта 2019

Я хочу преобразовать приведенный ниже запрос MySql в режим гибернации, используя критерии.tbl_state и tbl_country - это таблицы, к которым я хочу присоединиться, где tbl_state и tbl_country имеют общее поле country_id.

    select s.*,c.country_name from tbl_state s,tbl_country c where 
    s.country_id=c.country_id ORDER BY s.state_name 
    + order + " LIMIT " + pagesize + " OFFSET " + pagesize * pagenum;

1 Ответ

0 голосов
/ 19 марта 2019

Сначала вы должны создать сущность для таблиц.мы предполагаем, что 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...