У меня проблема с получением списка в JPA. Я знаю, что эта проблема связана с картированием «Один ко многим» мое требование состоит в том, чтобы получить список мест вместе с массивом изображений мест в месте dto. Но мой запрос выдает ошибку:
2019-04-30 07: 56: 20.504 ВНИМАНИЕ 10796 --- [nio-8888-exec-4]
o.h.engine.jdbc.spi.SqlExceptionHelper: Ошибка SQL: 1064, SQLState:
42000 2019-04-30 07: 56: 20.504 ОШИБКА 10796 --- [nio-8888-exec-4]
o.h.engine.jdbc.spi.SqlExceptionHelper: у вас есть ошибка в вашем
Синтаксис SQL; проверьте руководство, которое соответствует вашему серверу MySQL
версия для правильного синтаксиса для использования рядом с 'col_11_0_ с места
place0_ внутреннее соединение place_image placeimage1_ на place0_.i 'в строке 1
org.springframework.dao.InvalidDataAccessResourceUsageException: может
не извлекать ResultSet; SQL [н / п]; вложенное исключение
org.hibernate.exception.SQLGrammarException: не удалось извлечь
ResultSet
Я публикую здесь фрагменты кода. Пожалуйста, дайте мне знать, как я могу получить набор результатов с отображением один ко многим.
DAO:
@Override
public List<PlaceDto> findPlacesByCondition(String condition) {
return entityManager
.createQuery("select new com.app.hop.models.dto.PlaceDto(p.id, p.name, p.subLocality, p.locality, p.postalCode,"+
"p.administrativeArea, p.country, p.latitude, p.longitude," +
"p.rating, p.reviewCount,p.placeImages) from Place as p "+condition, PlaceDto.class).getResultList();
}
Сущность:
@Entity
@Table(name="place")
public class Place {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "UUID",
strategy = "org.hibernate.id.UUIDGenerator"
)
@org.hibernate.annotations.Type(type="uuid-char")
private UUID id;
private String name;
private String subLocality;
private String locality;
private String postalCode;
private String administrativeArea;
private String country;
private Double latitude;
private Double longitude;
private Double rating;
private Long reviewCount;
@OneToMany(mappedBy="place",cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
private Set<PlaceImage> placeImages = new LinkedHashSet<>();
}
Класс DTO:
public class PlaceDto {
private UUID id;
private String name;
private String subLocality;
private String locality;
private String postalCode;
private String administrativeArea;
private String country;
private Double latitude;
private Double longitude;
private Double rating;
private Long reviewCount;
private Set<PlaceImage> placeImages = new LinkedHashSet<>();
public PlaceDto(){}
public PlaceDto(UUID id, String name, String subLocality, String locality, String postalCode,
String administrativeArea, String country, Double latitude, Double longitude,
Double rating, Long reviewCount,Set<PlaceImage> placeImages){
this.id =id;
this.name =name;
this.subLocality = subLocality;
this.locality = locality;
this.postalCode = postalCode;
this.administrativeArea = administrativeArea;
this.country = country;
this.latitude = latitude;
this.longitude =longitude;
this.rating = rating;
this.reviewCount = reviewCount;
this.placeImages=placeImages;
}
}