Hibernate один на один, недопустимый запрос в хранилище - PullRequest
0 голосов
/ 05 октября 2018

В настоящее время я решаю эту проблему с помощью собственного запроса, также я знаю, что можно решить его с помощью таких запросов:

(first use cross join)
@Query("select s from SendingApplication s where s.sftpAccess.id is not null")
(second use left outer join)
@Query("select s from SendingApplication s left join s.sftpAccess sa where sa is not null") 

Но это не выглядело хорошо.

У меня есть 2лица:

@Entity
@Getter
@Setter
@Table(name = "sending_application")
public class SendingApplication {
    @Id
    @GeneratedValue
    private Integer id;

    @OneToOne(mappedBy = "sendingApplication", fetch = FetchType.LAZY)
    private SftpAccess sftpAccess;
}

и

@Entity
@Getter
@Setter
@Table(name = "sftp_access")
public class SftpAccess {
    @Id
    @GeneratedValue
    private Integer id;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(
            name="sending_application",
            referencedColumnName = "id",
            insertable = false,
            updatable = false
    )
    private SendingApplication sendingApplication;
}

Я могу загрузить отправляющее приложение, а затем получить доступ к полю sftpAccess, и оно содержит все данные.Но у меня есть репозиторий:

@Repository
public interface SendingApplicationDao extends AbstractDao<SendingApplication> {

    @Query("select s from SendingApplication s where s.sftpAccess is not null")
    List<SendingApplication> loadSftpApplications();
}

и метод loadSftpApplications используют этот запрос -

SELECT
    sendingapp0_.id AS id1_9_
FROM
    sending_application sendingapp0_
WHERE
    (sendingapp0_.id IS NOT NULL)

И я ожидаю увидеть

SELECT
    sendingapp0_.id AS id1_9_
FROM
    sending_application sendingapp0_
    left join sftp_access on sftp_access.sending_application = sendingapp0_.id
WHERE
    (sftp_access.id IS NOT NULL)

Что я делаю неправильно?

база данных:

CREATE TABLE `sending_application` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `sftp_access` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`sending_application`  int(11) NULL ,
FOREIGN KEY (`sending_application`) REFERENCES `sending_application` (`id`),
PRIMARY KEY (id)
);
...