Сопоставление сущности JPA с необязательной SecondaryTable

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

@Entity
@Table( name = "program", schema = "myschema" )
@SecondaryTable( name = "program_info", schema = "myschema", pkJoinColumns =
        @PrimaryKeyJoinColumn( name = "program_id", referencedColumnName = "program_id" ) )
public class Program { ... }

У меня есть все столбцы, сопоставленные соответствующим образом, и модульный тест, который работает. Проблема возникает, когда у меня есть строка в таблице программы, которая не имеет соответствующей строки в таблице program_info. В этом случае он не будет загружать программу. Мне нужно иметь возможность пометить всю вторичную таблицу как необязательную. Я бы предпочел держаться подальше от необходимости создавать другую сущность/dao/service и выполнять сопоставление 1-1.

Я использую eclipselink, но хотел бы держаться подальше от конкретных деталей поставщика, если смогу.

1 ответов


мне нужно иметь возможность пометить всю вторичную таблицу как необязательную.

EclipseLink будет выполнять INNER JOIN с SecondaryTable поэтому, если во вторичной таблице нет соответствующей строки, вы ничего не получите. Другими словами, EL ожидает найти строку во вторичной таблице (при создании, чтении, обновлении, удалении).

если то, что вы хотите-это OUTER JOIN, вы должны использовать дополнительно OneToOne ассоциация (возможно, с общим первичным ключом в вашем случай.)

альтернативой было бы использование представления базы данных (выполнение OUTER JOIN) и для отображения вида.

Я бы предпочел держаться подальше от необходимости создавать другую сущность/dao/service и выполнять сопоставление 1-1.

Я не понимаю, почему необязательного OneToOne заставляет вас иметь соответствующий DAO и сервис. Управляйте опционной частью через главную часть "держателя".

см. также