今日工作:今日完成了Hibernate多对多的映射关系,从xml的配置到注解的配置,对单、双向的N-N
有了新的认识,特别是维护数据的时候,不能双方都维护,应该交给另一方维护,不然会数据冲突。
解决:在进行双向N-N的配置的时候,在配置
@JoinTable( // 配置中间表的属性,表名和关联的两个实体的列明
name="Catogory_Item",
joinColumns=@JoinColumn(name="Category_ID"),
inverseJoinColumns=@JoinColumn(name="Item_ID"))
的一方进行了,mappeBy的属性的配置,导致属性冲突,一直会提示出错。
解决问题:
/**
* 分类信息
* @author tianliangge
*
*/
@Entity
public class Category {
@Id
@GenericGenerator(name="categoryId", strategy="native")
@GeneratedValue(generator="categoryId")
private Integer id;
private String name;
@ManyToMany // 特别注意的是:这里不能设置mappeBy的属性了,和JointTable发生冲突
// 在3.5版本以后,基本上不能共存了,需要在另一个表中设置反转的控制
@JoinTable( // 配置中间表的属性,表名和关联的两个实体的列明
name="Catogory_Item",
joinColumns=@JoinColumn(name="Category_ID"),
inverseJoinColumns=@JoinColumn(name="Item_ID"))
private Set<Item> items = new HashSet<>();
// getter、setter略
}
/**
* 项目
* @author tianliangge
*
*/
@Entity
public class Item {
@Id
@GenericGenerator(name="itemId", strategy="native")
@GeneratedValue(generator="itemId")
private Integer id;
private String name;
@ManyToMany(mappedBy="items") // 设置反转,自己放弃维护关系
private Set<Category> categories = new HashSet<>();
// getter、setter略
}
特别注意:只能在没有@JoinTable注解的一方方进行MappedBy配置,否则会和@JoinTable冲突。
明日计划:明日进行仓库表的改进,开始把DAO层改成对Hibernate的支持。