【发布时间】:2016-05-07 17:55:49
【问题描述】:
我有一些像 multimedia_feature 这样的连接表。
向导将在 Multimedia 类中创建一个 List 属性:
...
@JoinTable(name = "multimedia_feature", joinColumns = {
@JoinColumn(name = "feature_oid", referencedColumnName = "oid")}, inverseJoinColumns = {
@JoinColumn(name = "multimedia_oid", referencedColumnName = "oid")})
@ManyToMany
private List<Feature> featureList;
...
因为我只需要一个多对一关系(一个功能可以有多个多媒体文件),我将 media_oid 标记为唯一。 在此之后,向导创建其他 2 个表(我认为是多余的)
@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;
或者这会妨碍正确的持久性?
【问题讨论】: