Как избежать присоединения к таблице при запросах по внешнему ключу? - PullRequest
2 голосов
/ 02 февраля 2020

У меня есть класс Comment со свойством user, определенным как:

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    @NonNull
    private User user;

У меня есть CommentRepository:

public interface CommentRepository extends CrudRepository<Comment, Integer> {
    List<Comment> findByUserId(Integer userId);
}

Я хочу запросить определенный комментарии пользователя по его идентификатору.

Я делаю так:

commentRepository.findByUserId(userId);

все отлично работает, кроме запроса выглядит так:

select
    comment0_."id" as id1_1_,
    comment0_."text" as url2_1_,
    comment0_."user_id" as user_id3_1_
    from
        "comments" comment0_
    left outer join
        "users" user1_
    on comment0_."user_id"=user1_."id"
    where
    user1_."id"=?

Я хочу избежать этого объединения, так как могу запросить непосредственно по столбцу user_id в таблице comments.

Я не хочу использовать аннотацию @Query, я думаю, что должна быть умнее.

1 Ответ

1 голос
/ 02 февраля 2020

Значение по умолчанию для @ManyToOne (необязательно = true) и @JoinColumn (nullable = true) вызывает это дополнительное объединение. Вы можете попробовать,

@ManyToOne(fetch=FetchType.LAZY, optional = false)
@JoinColumn(name="`user_id `", nullable = false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...