Проблема PagingAndSortingRepository findByattributename - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть объект сущности отеля, и мне нужно использовать нумерацию страниц для его поиска. Я попытался реализовать это через интерфейс PagingAndSortingRepository. У меня нет столбцов в сущности. Мое решение хорошо работает для некоторых атрибутов, таких как "destinationcode" и "city", но когда я пытаюсь получить результаты по "hotelcode" и "hotelname", я вижу в журнале запрос количества

 ("Hibernate: select count(hotel0_.destinationcode) as col_0_0_ from Hotel hotel0_ where hotel0_."HOTELNAME"=?") 

выполняется только, а не фактический запрос выбора без ошибок или исключений. В случае рабочих методов, таких как findByCity, я вижу в журнале оба счета, а затем запросы Select.

Все вышеперечисленные 4 имеют тип String в сущности. Моя основная сущность - это Hotel, и у нее есть встроенный идентификатор HotelPk, который, как я думаю, похож на стандартные сущности с композитными ключами. так что методы в моем хранилище, которые работают

Page<Hotel> findByIdDestinationcode(String destinationCode, Pageable pageRequest); 

и

Page<Hotel> findByCity(String state, Pageable pageRequest);

и те, которые не работают

Page<Hotel> findByIdHotelcode(String hotelCode, Pageable pageRequest);
Page<Hotel> findByHotelname(String hotelName, Pageable pageRequest);

Подпись моего хранилища

public interface HotelRepository extends JpaRepository<Hotel, HotelPK>, PagingAndSortingRepository<Hotel, HotelPK> {
//...... methods are defined here.
}

Любая помощь по этому вопросу будет высоко оценена.

@Entity
@NamedQuery(name="Hotel.findAll", query="SELECT h FROM Hotel h")
public class Hotel implements Serializable {
private static final long serialVersionUID = 1L;

/*@EmbeddedId
private HotelPK id;*/
@Id
private String destinationcode;

private String hotelcode;

@Size(max = 20, message = "Column CITY cannot be more than 20 
characters.")
private String city;

//  @NotNull(message = "Column HOTELNAME cannot be null.")
@Size(max = 50, message = "Column HOTELNAME cannot be more than 50 
characters.")
private String hotelname;

/**
 * @return the destinationcode
 */
public String getDestinationcode() {
    return destinationcode;
}

/**
 * @param destinationcode the destinationcode to set
 */
public void setDestinationcode(String destinationcode) {
    this.destinationcode = destinationcode;
}

/**
 * @return the hotelcode
 */
public String getHotelcode() {
    return hotelcode;
}

/**
 * @param hotelcode the hotelcode to set
 */
public void setHotelcode(String hotelcode) {
    this.hotelcode = hotelcode;
}

/**
 * @return the city
 */
public String getCity() {
    return city;
}

/**
 * @param city the city to set
 */
public void setCity(String city) {
    this.city = city;
}

/**
 * @return the hotelname
 */
public String getHotelname() {
    return hotelname;
}

/**
 * @param hotelname the hotelname to set
 */
public void setHotelname(String hotelname) {
    this.hotelname = hotelname;
}
}
@Service(value = "HotelDao")
public class HotelDaoImpl implements HotelDao {
@Resource
private HotelRepository hotelRepository;

@Override
public Page<Hotel> searchHotel(String hotelCode, String hotelName, String 
      destinationCode, Pageable pageRequest) throws Exception {
    if(hotelCode!=null){
        return hotelRepository.findByHotelcode(Tools.padRight(hotelCode, 
3), pageRequest);
    }

    if(destinationCode!=null){
        return 
hotelRepository.findByDestinationcode(Tools.padRight(destinationCode, 3), 
pageRequest);
    }

    return hotelRepository.findByHotelname(hotelName, pageRequest);
}
}

public interface HotelRepository extends JpaRepository<Hotel, String> {
Page<Hotel> findByHotelcode(String hotelCode, Pageable pageRequest);

Page<Hotel> findByDestinationcode(String destinationCode, Pageable 
pageRequest);
Page<Hotel> findByHotelname(String hotelname, Pageable pageRequest);
}

1 Ответ

0 голосов
/ 08 сентября 2018

Нет необходимости снова расширять PagingAndSortingRepository<Hotel, HotelPK>, поскольку JpaRepository<Hotel, HotelPK> уже расширяет его. Вы можете проверить его реализацию.

Итак, определите ваш репозиторий следующим образом.

public interface HotelRepository extends JpaRepository<Hotel, HotelPK> {
//...... methods are defined here.
}

Теперь, перейдя к вашему вопросу, вы можете сделать следующее.

  public Page<Hotel> findAll(Pageable pageable) {
    Hotel hotel = new Hotel();
    hotel.setHotelCode("HC");
    hotel.setHotelName("Hotel");
    return hotelRepository.findAll(Example.of(hotel),pageable);
  } 

на вашем уровне обслуживания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...