2018-4-16 日志记录(双向多对多)

今日工作:今日完成了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的支持。


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭