shop++ hibernate注解
2015-10-08 15:51
246 查看
最近接触到一款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 ord
e960
er
@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是由程序内部方法定义的。
@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 ord
e960
er
@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是由程序内部方法定义的。
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 深入理解Hibernate中的flush机制
- 简单的手工hibernate程序示例
- 解析使用jdbc,hibernate处理clob/blob字段的详解
- 浅析java程序中hibernate的应用总结
- java面试常见问题之Hibernate总结
- 关于Hibernate的一些学习心得总结
- Hibernate管理Session和批量操作分析
- 基于spring+hibernate+JQuery开发之电子相册(附源码下载)
- java Hibernate 一对多自身关联问题