У меня есть некоторые таблицы объединения, подобные этому multimedia_feature.создать сущность из мастера базы данных jpa 2.1 @ManyToMany, список исправлений не нужен
Мастер создаст в категории класса атрибут List:
...
@JoinTable(name = "multimedia_feature", joinColumns = {
@JoinColumn(name = "feature_oid", referencedColumnName = "oid")}, inverseJoinColumns = {
@JoinColumn(name = "multimedia_oid", referencedColumnName = "oid")})
@ManyToMany
private List<Feature> featureList;
...
, так как я просто нужны отношения ManyToOne (одна функция может иметь много мультимедийных файлов), я помечено multimedia_oid, как UNIQUE. После этого мастер создает другие 2 таблицы (я думаю redoundant)
@Entity
@Table(name = "multimedia_feature")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "MultimediaFeature.findAll", query = "SELECT m FROM MultimediaFeature m"),
@NamedQuery(name = "MultimediaFeature.findByMultimediaOid", query = "SELECT m FROM MultimediaFeature m WHERE m.multimediaFeaturePK.multimediaOid = :multimediaOid"),
@NamedQuery(name = "MultimediaFeature.findByFeatureOid", query = "SELECT m FROM MultimediaFeature m WHERE m.multimediaFeaturePK.featureOid = :featureOid")})
public class MultimediaFeature implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected MultimediaFeaturePK multimediaFeaturePK;
@JoinColumn(name = "multimedia_oid", referencedColumnName = "oid", insertable = false, updatable = false)
@OneToOne(optional = false)
private Multimedia multimedia;
@JoinColumn(name = "feature_oid", referencedColumnName = "oid", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Feature feature;
...
...
и
@Embeddable
public class MultimediaFeaturePK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "multimedia_oid")
private int multimediaOid;
@Basic(optional = false)
@NotNull
@Column(name = "feature_oid")
private int featureOid;
...
...
, наконец, добавлен атрибут в мультимедийный класс:
....
@OneToOne(cascade = CascadeType.ALL, mappedBy = "multimedia")
private MultimediaFeature multimediaFeature;
....
, поскольку у меня действительно много join classes, я бы не стал создавать все эти классы. Могу ли я вручную создать атрибуты, такие как:
@JoinTable(name = "multimedia_feature",
@JoinColumn(name"feature_oid", referencedColumnName = "oid")
)
@OneToOne(optional = false)
private Feature feature;
или это исключает возможность правильного упорства?
я не могу добавить атрибут в мультимедиа, потому что этот класс имеет другие присоединиться таблица с другими классами ... если я добавлю атрибут для каждого класса, у меня будет много «нулевых» значений в db ... я думаю, что это не очень хорошая практика, не так ли? Итак, в первую очередь, что мне нужно писать в мультимедийном классе? – Marco
@ManyToOne (отображается в списке мультимедиа) ? – Marco
@Marco Если вам нужно сохранить таблицу соединений и двунаправленную связь, вы можете использовать Мультимедиа как принадлежащую стороне и определить ее там, и использовать атрибут mappedBy на другом конце, который является Feature. Я изменил свой ответ на демо. –