Как обрабатываются JPA JOIN с доступной записью внешнего ключа, но не доступной записью внешнего ключа? - PullRequest
1 голос
/ 03 декабря 2009

Интересно, как JPA определяет для обработки следующего сценария:

Table A: | Table B:
ID  FK_B | ID
1   10   | 10
2   null | 12
3   11   |

Мне нужны все записи таблицы A с FK_B NULL или ссылка на запись таблицы B отсутствует.

public class A implements Serializable {
    @Id
    private Long id;

    @JoinColumn(name = "FK_B", nullable = true)
    @ManyToOne
    private B b;
}

public class B implements Serializable {

    @Id
    private Long id;
}

Определено ли, что произойдет, если я использую

SELECT a FROM A a LEFT JOIN a.b WHERE a.b IS NULL

или: (Возможно ли это?)

SELECT a FROM A a LEFT JOIN B b on (b = a.b) WHERE b IS NULL

Мне нужен список, содержащий

A(id = 2)
A(id = 3)

Большое спасибо!

1 Ответ

1 голос
/ 03 декабря 2009

Строка № 3 в вашей Таблице A является недопустимой по определению; если нет B с ID = 11, у вас не может быть этой строки в таблице A, поскольку вы нарушили бы ограничение внешнего ключа.

Поскольку все строки из A, где B равно нулю, ваш первый запрос должен работать. Вы также можете попробовать:

SELECT a FROM A a WHERE a.b.id IS NULL

хотя я не уверен на 100%, правильный ли это синтаксис JPA QL (он работает для Hibernate)

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