У меня есть проект, который использует 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, не вдаваясь в проблемы, упомянутые выше?