У меня есть ряд таблицMapping JPA Сущность
programme episode performer prog_ep_perf
---------- --------- --------- ------------
programmeId episodeId performerId programmeId
progTitle episodeTitle performerName episodeId
programmeId performerId
prog_ep_perf
является таблицей соединения (programmeId в таблице эпизода может быть излишними из-за столом присоединиться?). Я разработал следующие отношения, которые, я думаю, верны
programme
@OneToMany
episode --> One programme can have many episodes
@OneToMany
performers --> One programme can have many performers
episode
@OneToOne
programme --> One episode links to one programme
@OneToMany
performers --> One episode can have many performers
performer
@OneToMany
programme --> One performer can have many programmes
@OneToMany
episode --> One performer can have many episodes
Вот как я создал объекты, это правильно?
@Entity
@Table(name = "PROGRAMME")
public class Programme {
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy="increment")
private Long programmeId;
private String progTitle;
@OneToMany(
targetEntity=Performer.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE}
)
@JoinTable(
name="PROG_EP_PERF",
[email protected](name="PROGRAMMEID"),
inverseJoinColumns={@JoinColumn(name="PERFORMERID")}
)
private Set<Performer> performers;
@OneToMany(
targetEntity=Performer.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE}
)
@JoinTable(
name="PROG_EP_PERF",
[email protected](name="PROGRAMMEID"),
inverseJoinColumns={@JoinColumn(name="EPISODEID")}
)
private Set<Episode> episodes;
}
@Entity
@Immutable
@Table(name = "EPISODE")
public class Episode {
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy="increment")
private Long episodeId;
@Type(type="com.springtests.model.Programme")
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="PROGRAMMEID")
private Programme programme;
private String episodeTitle;
@OneToMany(
targetEntity=Performer.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE}
)
@JoinTable(
name="PROG_EP_PERF",
[email protected](name="EPISODEID"),
inverseJoinColumns={@JoinColumn(name="PERFORMERID")}
)
private Set<Performer> performers;
}
@Entity
@Immutable
@Table(name = "PERFORMER")
public class Performer {
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy="increment")
private Long performerId;
private String performerName;
@OneToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
targetEntity = Programme.class
)
@JoinTable(
name="PROG_EP_PERF",
[email protected](name="PERFORMERID"),
inverseJoinColumns={@JoinColumn(name="PROGRAMMEID")}
)
public Set<Programme> programmes;
@OneToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
targetEntity = Programme.class
)
@JoinTable(
name="PROG_EP_PERF",
[email protected](name="PERFORMERID"),
inverseJoinColumns={@JoinColumn(name="EPISODEID")}
)
public Set<Episode> episodes;
}
Вы пробовали это? FYI, этот инструмент может помочь вам: https://github.com/sp00m/db2jpa. – sp00m
Я не думаю, что он будет работать так, как вы могли ожидать, поскольку отображение OneToMany находится между двумя объектами, а не 3. Таким образом, ваши строки таблицы соединений будут иметь только два внешних ключа, заселяемых за раз, и у вас могут быть проблемы со строками отсутствует и т. д., потому что множественные сопоставления записывают и удаляют из одной и той же таблицы способами, которые могут конфликтовать. – Chris