shop++ 中 Hibernate 注解

最近接触到一款JAVA开源软件(shop++)这是一款电商软件。然后看了这款软件的源代码,发现真的很强大。框架采用的是spring mvc + hibernate + freemarker ,代码结构层次分明,代码封装和重用性也很高。非常适合二次开发。其次重点说说hibernate 注解吧 数据库表采用的是hibernate注解映射的方式。然后略微研究了下,分享一下自己的见解。

@Entity
说明此类是一个实体映射


@Table
table用来定义entity主表的name,cataloh,schema属性。
name:表名
catalog:对应关系数据库中的catalog
schema:对应关系数据库中的schema


@Column
name:列名
unique:是否唯一
nullable:是否允许为空
insertable:是否允许插入
updatable:是否允许更新

@JoinColumn
如果在entity class 的field上定义了关系(一对一 、一对多等)我们就通过joinColumn来定义关系的属性。JoinColumnde 的大部分属性和Column类似.
name:列名
unique:是否唯一
nullable:是否允许为空
insertable:是否允许插入
updatable:是否允许更新

@Transient

transient用来注释entity的属性,指定的这些属性不会被持久化,也不会为这些属性建表



@OrderBy
在一对多,多对多的关系中,有时我们希望从数据库加载出来的集合对象是按一定方式排序的,这可以通过OrderBy来实现,默认是按对象的主键升序排列

@JoinTable(name="xx_article_tag")
说明数据源(数据表),来之于那个数据库

一对一关系映射:
     售后服务(customer)---------------订单表(order)


在售后服务一端配置
     private Order order

     @NotNull
     @JoinColumn(name = "order_id", nullable = false, updatable = false)//   在售后表中配置一个订单ID    不能为空    不能修改
     @OneToOne

在订单表一端配置
     private Customer customer


     @OneToOne( cascade = CascadeType.REMOVE, mappedBy = "order") // 级联影响删除操作,被映射于“order”    


一对多关系映射:
      文章(article)----------文章分类(articleCategory
在文章一端配置
      private ArticleCategory articleCategory


      @NotNull
      @ManyToOne(fetch = FetchType.LAZY)//设置抓取策略:LAZY为延迟加载
      @JoinColumn(nullable = false) 
在文章分类一端配置
        private Set<Article> articles = new HashSet<Article>()


        @OneToMany(mappedBy = "articleCategory", fetch = FetchType.LAZY) 


mappedBy :
1、只有配置了OneToOne,OneToMany,ManyToMany的一方才有mappedBy属性
2、mappedBy标签一定是定义在被拥有方的,他指向拥有方
3、mappedBy跟joinColumn/joinTable总是处于互斥的一方,也可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义的joinColumn/joinTable总是失效的,不会建立对应的字段或者表;


多对多关系映射:
         标签(tag)---------------文章(article)
在标签一端配置
         private Set<Article> articles = new HashSet<Article>()


         @ManyToMany(mappedBy = "tags", fetch = FetchType.LAZY)


在文章一端配置
          private Set<Tag> tags = new HashSet<Tag>()


          @ManyToMany(fetch = FetchType.LAZY)//抓取方式为延迟加载
          @JoinTable(name = "xx_article_tag")//说明数据源,来之于那个数据表
          @OrderBy("order asc")//asc:按照主键升序假设来排列,此处的order  asc是由程序内部方法定义的。

你可能感兴趣的:(shop++ 中 Hibernate 注解)