JPQL запрос для многих ко многим - PullRequest
0 голосов
/ 04 марта 2020

Я хочу написать JPQL-запрос для выборки строк, имеющих значения идентификатора таблицы «многие ко многим». У меня есть два класса:

@Entity
@Table(name = "farm")
@Getter
public class Farm {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

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

    @ManyToOne()
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name = "customer_id", referencedColumnName = "id")
    private Customer customer;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "user_farm", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "farm_id"))
    private List<User> users = new ArrayList<>();
}

и

@Entity
@Table(name = "user")
@Getter
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    @Column(name = "email")
    private String email;

    @Column(name = "password")
    private String password;

    @ManyToMany(mappedBy = "users")
    private List<Farm> farms = new ArrayList<>();

    @Column(name = "is_admin")
    private Boolean isAdmin;
}

и хранилище:

public interface FarmRepository extends JpaRepository<Farm, Long> {

    @Query("select f from Farm f join f.users u where u.id=:userId")
    List<Farm> findByUserId(@Param("userId") Long userId);
}

Но я получаю эту ошибку гибернации:

ERROR: column user2_.id does not exist

Как правильно написать запрос jpql, чтобы он работал?

Ответы [ 3 ]

0 голосов
/ 04 марта 2020

Думаю, у меня тоже может быть похожая проблема. Имя таблицы «пользователь» очень часто зарезервировано, вы не можете его использовать. Попробуйте переименовать его в «лицо» или что-то еще. Наверное, это поможет.

{ ссылка }

0 голосов
/ 04 марта 2020

Насколько я знаю, @ManyToMany нуждается в двунаправленном отношении, но на вашем примере оно одно. Давайте посмотрим на структуру:

User:
Long id;
Farm:
Long id;
User_farm:
Long r_user_id;
Long r_farm_id;

Итак, @JoinTable должно быть:

  @ManyToMany(cascade = CascadeType.ALL)
  @JoinTable(
      name = "USER_FARM",
      joinColumns = @JoinColumn(name = "r_user_id", referencedColumnName = "id"),
      inverseJoinColumns = @JoinColumn(name = "r_farm_id", referencedColumnName = "id"))
  private List<User> users;
0 голосов
/ 04 марта 2020

Ошибка указывает на тот факт, что запрос был выполнен, но ваша таблица базы данных не содержит столбец идентификатора.

  1. Go в файл application.properties и добавьте его в см. SQL в вашей консоли:

    spring.jpa.show-sql = true

    spring.jpa.properties.hibernate.format_sql = true

  2. Выполните тест и посмотрите, сгенерировано ли правильное SQL.

  3. Подумайте, кто создает вашу базу данных? Automati c hbm2ddl создание схемы? LiquiBase? Пролетный путь? схема. sql? Исправьте таблицы базы данных.

...