Spring Data Jpa Join с несколькими таблицами без @Query - PullRequest
0 голосов
/ 05 апреля 2019

Я новичок в загрузке Spring, особенно для Spring Boot Data. JPA

Я хочу написать метод JPA без @Query

Я знаю, как выбирать через @Query.о чистых данных JPA-метод, такой как

Integer findByLevelPointBetweenSomethingAndSomething2 (Integer userId);

 @Entity
 @Table(name = "point")
 public class Point {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "point_id", nullable = false)
private Integer pointId;

@Column(name = "user_id", nullable = false)
private Integer userId;

@Column(name = "point", nullable = false)
private Integer point;

@Column(name = "user_account_point_type_id", nullable = false)
private Integer pointTypeId;

@Column(name = "date_created", nullable = false)
private Date createdDate;

Это Point Entity, который сохраняет точку

и сущность Level

 @Entity

 @Table(name = "level", schema = "public")
  public class Level {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "level_id", nullable = false)
private Integer levelId;

@Column(name = "user_id", nullable = false)
private Integer userId;

@Column(name = "level_type_id", nullable = false)
@JoinColumn(name ="level_type_id")
private Integer levelTypeId;


@Column(name = "reg_date", nullable = false)
private Date regDate;

и тип уровня состоит из 4-х типов (1-бронза / 2-серебро / 3-золото / 4-платина), и тип уровня проверяется при сохранении точки

иэто запрос, который я делаю

выбрать ult.level_type_id из уровня_уровня ult, где (выбрать сумму (up.point) из уровня ull, указать вверх, level_type ult, где ull.level_type_id = ult.level_type_id и ull.user_id= up.user_id и up.user_id = 73) между ult.level_start_point AND ult.level_end_point

результат является level_type в виде целочисленной формы

этот запрос, который я хочу сделать как JPA @Query () X!!!

НРАВИТСЯS @ Repository

 public interface LevelTypeRepository extends 
JpaRepository<LevelType,Integer> {

Integer findByLevelPointMaxBetweenLevelPointMinAndLevelPointMax(Integer 
userId);

}

Однако он не работает и не знает, как объединить три таблицы с одним параметром. Более того, параметр (user_id) между level_start_point и level_end_point

Сложно ли выразить через JPA?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Да, это невозможно без @Query.

Вы должны использовать JPA QL или HQL.

Вместо прямой таблицы базы данных он использует класс сущностей Java, который сопоставляется с таблицами базы данных.

вы используете имя таблицы в вашем запросе, что неправильно

Используйте имя класса Entity вместо имени таблицы и используйте значение свойства объекта вместо имени столбца таблицы.

Например

@Query("SELECT l.levelId FROM Level l where l.userId = :uid")
0 голосов
/ 05 апреля 2019

Имеет ли база данных такое отношение соединения, т. Е. Есть ли в таблицах отношение Foreign_key Primary_Key между таблицами?Если да, вы можете сделать это без использования аннотации @Query.В противном случае JPA не присоединится к таблице самостоятельно, поэтому требуется специальный запрос и становится необходим тег @Query.

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