私はこのような結合テーブルを持っていますmultimedia_feature。データベースウィザードからエンティティを作成する2.1 @ManyToMany、修正リストが不要です
ウィザードは、マルチメディアクラスのList属性が作成されます:私はちょうどManyToOneの関係を(一つの特徴は、多くのマルチメディアファイルを持つことができます)必要があるので
...
@JoinTable(name = "multimedia_feature", joinColumns = {
@JoinColumn(name = "feature_oid", referencedColumnName = "oid")}, inverseJoinColumns = {
@JoinColumn(name = "multimedia_oid", referencedColumnName = "oid")})
@ManyToMany
private List<Feature> featureList;
...
を、私はUNIQUEとしてmultimedia_oidフラグが立て。私は本当に多くの持っているので
....
@OneToOne(cascade = CascadeType.ALL, mappedBy = "multimedia")
private MultimediaFeature multimediaFeature;
....
: はこの後、ウィザードは、他の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;
...
...
を作成し、最終的には、マルチメディアクラスの属性を追加しましたクラスに参加すると、これらのクラスをすべて作成することは避けています。
@JoinTable(name = "multimedia_feature",
@JoinColumn(name"feature_oid", referencedColumnName = "oid")
)
@OneToOne(optional = false)
private Feature feature;
またはこれが正しい持続性を排除: iは、手動のような属性を作成できますか?
このクラスは他の人が参加しているので、私は、マルチメディアに属性を追加することはできませんテーブルを他のクラスと...私は各クラスの属性を追加する場合、私はdbの "null"の値をたくさん持っているだろう...私はそれは良い練習ではないと思う、右?だから、最初の方法で、私はマルチメディアクラスで何を書かなければならないのですか? – Marco
@ManyToOne(multimediaListによってマップされる) ? – Marco
@Marco結合表と双方向結合を保持する必要がある場合は、マルチメディアを所有側として使用し、そこに結合を定義し、フィーチャーであるもう一方の端にmappedBy属性を使用できます。私はデモのために私の答えを微調整しました。 –