1
我有一些像這樣的連接表multimedia_feature。從數據庫嚮導創建實體jpa 2.1 @ManyToMany,不需要修復列表
嚮導將多媒體類中創建一個列表屬性:因爲我只需要一個多對一的關係(一個功能,可以有多個多媒體文件)
...
@JoinTable(name = "multimedia_feature", joinColumns = {
@JoinColumn(name = "feature_oid", referencedColumnName = "oid")}, inverseJoinColumns = {
@JoinColumn(name = "multimedia_oid", referencedColumnName = "oid")})
@ManyToMany
private List<Feature> featureList;
...
,我標記multimedia_oid具有唯一性。 在此之後,嚮導將創建其他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;
....
,因爲我真的有很多加入類,我會避免創建所有這些類。 我可以手動創建的屬性,如:
@JoinTable(name = "multimedia_feature",
@JoinColumn(name"feature_oid", referencedColumnName = "oid")
)
@OneToOne(optional = false)
private Feature feature;
或這排除了正確的持久性?
我不能在多媒體添加一個屬性,因爲這個類有其他人加入表與其他類...如果我爲每個類添加一個屬性,我會在db中有很多「空」值...我認爲這不是一個好習慣,對吧?那麼,在第一種方式中,我必須在多媒體課程中寫什麼? – Marco
@ManyToOne(由multimediaList映射) ? – Marco
@Marco如果您確實需要保留連接表和雙向綁定,那麼您可以使用Multimedia作爲擁有方,並在其中定義連接,並在Feature的另一端使用mappedBy屬性。我調整了我的答案來演示。 –