Hibernate многомодульный проект: расширить сущность, чтобы добавить отношения многие ко многим - PullRequest
1 голос
/ 13 января 2020

У меня есть проект, который использует Hibernate и разделен на несколько модулей.
У меня есть следующие модули:

  • устройство (определяет сущность Device)
  • appstore (определяет сущность Application)
  • device-appstore-Integration (добавляет отношение многие ко многим между Device и Application).

Сущности выглядят так:

@Entity
@Table(name = "devices")
public class Device extends AbstractAuditingEntity implements Serializable
{
    @NotNull
    @EmbeddedId
    private DeviceIdentity identity;

    // ...
}
@Entity
@Table(name = "apps")
public class App extends AbstractAuditingEntity implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    // ...
}

Теперь я хочу, чтобы модуль device-appstore-integration добавил отношение многие ко многим между двумя сущностями выше.
Я думал о добавлении сущности DeviceWithInstalledApps, чтобы определить это отношение many2many и использовал следующий код:

@Entity
@Table(name = "devices")
public class DeviceWithInstalledApps extends Device
{
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
            name = "devices_installed_apps",
            joinColumns = {/*...*/},
            inverseJoinColumns = {/*...*/}
    )
    private Set<App> installedApps = new HashSet<>();

    // ...
}

Проблема в том, что Hibernate требует, чтобы таблица devices включала столбец dtype, и обрабатывает DeviceWithInstalledApps как отдельную сущность, которая наследуется от Device, но я не на самом деле хочу, чтобы это была отдельная сущность. Это все та же сущность, только с добавленным отношением «многие ко многим», так что я могу фактически получить доступ к этому отношению, столбцы не добавляются, поэтому нет необходимости предоставлять столбец dtype, в этом просто нет смысла context.

Есть ли какой-либо другой способ определения отношения многие ко многим в JPA / Hibernate, чтобы я мог на самом деле реализовать бизнес-логику c, не вдаваясь в проблемы, упомянутые выше?

...