JPA именованный запрос findAllBy с Long и String - PullRequest
1 голос
/ 07 октября 2019

У меня проблема с данными пружины. Метод именования JPA findAllBy ...

Это моя сущность:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;

@Column(name = "entity_id")
private Long entityId;

@Column(name = "entity_name")
private String entityName;

@Column(name = "user_id")
private Long userId;

@Column(name = "rating")
private Double rating;

@Column(name = "like")
private Long like;

@Column(name = "dislike")
private Long dislike;

@Column(name = "review_title")
private String reviewTitle;

@Lob
@Column(name = "review_comment")
private String reviewComment;

@Column(name = "time")
private ZonedDateTime time;

@ManyToOne
private RatingType type;

с геттерами и сеттерами.

Это методвызовите ratingServiceImpl с @Autowired ratingRepository:

List<Rating> ratings = ratingRepository.findAllByEntityIdAndEntityName(entityId, entityName);

и хранилищем:

@Repository
public interface RatingRepository extends JpaRepository<Rating, Long>, 
  JpaSpecificationExecutor<Rating> {
     List<Rating> findAllByEntityIdAndEntityName(Long entityId, String entityName); 
}

Зависимость:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>1.5.10.RELEASE</version>
</dependency>

Причина:

Вызвано: org.h2.jdbc.JdbcSQLException: синтаксическая ошибка в операторе SQL «ВЫБЕРИТЕ RATING0_.ID AS ID1_48_, RATING0_.DISLIKE AS DISLIKE2_48_, RATING0_.ENTITY_ID AS ENTITY_I3_48_ ENT_IT_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0"А.С. LIKE5_48_, RATING0_.RATING А.С. RATING6_48_, RATING0_.REVIEW_COMMENT А.С. REVIEW_C7_48_, RATING0_.REVIEW_TITLE А.С. REVIEW_T8_48_, RATING0_.TIME А.С. TIME9_48_, RATING0_.TYPE_ID А.С. TYPE_ID11_48_, RATING0_.USER_ID КАК USER_ID10_48_ паспортной RATING0_ ГДЕ RATING0_.ENTITY_ID =? И RATING0_. ENTITY_NAME =? "; ожидаемый «идентификатор» ;Оператор SQL: выберите rating0_.id в качестве id1_48_, rating0_.dislike в качестве dislike2_48_, rating0_.entity_id в качестве entity_i3_48_, rating0_.entity_name в качестве entity_n4_48_, rating0_.like в виде like5_48_, rating0_.tinging в качестве rating6_48_, rating0_re_0_0_0_0_re_0_re_0review_t8_48_, rating0_.time как time9_48_, rating0_.type_id как type_id11_48_, rating0_.user_id как user_id10_48_ из рейтинга rating0_, где rating0_.entity_id =? и рейтинг0_.entity_name =? [42001-196]

другие исключительные ситуации по этой ссылке

Спасибо за решение заранее.

1 Ответ

1 голос
/ 07 октября 2019

Старайтесь не использовать зарезервированные слова БД в качестве имен столбцов и переменных при создании сущности JPA.

Я полагаю, что проблема в

@Column(name = "like")
private Long like;

, поскольку оператор SQL, созданный Spring,:

...  RATING0_.LIKE[*] AS LIKE5_48_,

Можно ли изменить имя столбца?

...