java Hibernate一对多映射覆盖
在使用hibernate进行一对多映射时,我面临着一个hibernate问题。下面是我的两个实体类和联接表实体类。 ArticleCategoryMap。爪哇
@Entity
@Table(name = "ARTICLECATEGORYMAP")
public class ArticleCategoryMap {
private static final long serialVersionUID = -5653708523600543988L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column ( name = "id")
Long id;
@ManyToOne(targetEntity = Article.class, fetch = FetchType.EAGER, optional = true, cascade = CascadeType.PERSIST)
@JoinColumn(name = "ARTICLE_ID", nullable = true, insertable = true, updatable = true)
private Article article;
@ManyToOne(targetEntity = Category.class, fetch = FetchType.EAGER, optional = true, cascade = CascadeType.PERSIST)
@JoinColumn(name = "CATEGORY_ID", nullable = true, insertable = true, updatable = true)
private Category category;
//setter and getter
}
文章。爪哇
@Entity
@Table(name = "ARTICLE")
public class Article {
private long id;
private String title;
private String description;
private String keywords;
private String content;
@Id
@GeneratedValue
@Column(name = "ARTICLE_ID")
public long getId() {
return id;
}
//setter and getter
}
类别。爪哇
@Entity
@Table(name = "CATEGORY")
public class Category {
private long id;
private String name;
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(
name = "ARTICLECATEGORYMAP",
joinColumns = @JoinColumn(name = "CATEGORY_ID"),
inverseJoinColumns = @JoinColumn(name = "ARTICLE_ID")
)
@CollectionId(
columns = @Column(name="id"),
type=@Type(type="long"),
generator = "sequence"
)
private Collection<Article> articles;
@Id
@GeneratedValue
@Column(name = "CATEGORY_ID")
public long getId() {
return id;
}
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(
name = "ARTICLECATEGORYMAP",
joinColumns = @JoinColumn(name = "CATEGORY_ID"),
inverseJoinColumns = @JoinColumn(name = "ARTICLE_ID")
)
@CollectionId(
columns = @Column(name="id"),
type=@Type(type="long"),
generator = "sequence"
)
// setter an getter
}
现在假设我第一次在article表中有两个元素,它们映射到category表的一个条目。所以连接表看起来像
现在由于某种原因,我想更新条目,其中文章条目将映射到一个新的类别ID
所以我的问题是如何更新这个连接表
# 1 楼答案
如果你想要一对多关系(一个类别有许多文章,一个类别有一个文章对一个类别),你不需要一个联接表
实体类应该如下所示:
类别实体:
包含一组文章:
文章实体:
有关更多详细信息,请查看hibernate-one-to-many。希望这有帮助
还可以将注释从方法移动到字段。这是:
应该是:
多对多关系:
在数据库中有3个表:
对于多对多关系实体而言:
类别实体:
文章实体:
有关更多信息,请查看many-to-many ralationship