基于注解的关联关系Hibernate(1)——引入知识

来源:互联网 发布:c语言判断水仙花数程序 编辑:程序博客网 时间:2024/06/08 13:50

- 应了解的相关知识

  • 1.单/双向关联关系

首先我们要知道hibernate中单向关联关系和双向关联这个双向、单向是面向对象的说法,了解了单向关联关系和双向关联关系的区别,可以方便之后理解基于注解的Hibernate关联关系配置。

从更新角度看:双向就是这两个表无论哪一个更新另外一个表都更新,而单向就是只有主(主控)表更新从(被控)表才更新,从表更新主表不会去管。

从访问角度看:单向关联是在A类中,可以访问到B类数据,由此访问B表的数据,但在B类中却无法访问A类数据,即访问不到A表数据。
双向是在B类里也可以访问A的数据。

使用选择:看需求,如:班级表和学生表,对应的java类是班级类和学生类,若在显示学生信息的时候需要同时显示其所属的班级信息,那么就可以建立学生类到班级类的单向关联,如果要在显示班级基本信息的同时显示其所对应的学生信息,那么这时就可以建立双向关联了。

  • 2.要了解的一些Hibernate基本注解

使用注解的目的:为了简化繁琐的ORM映射文件(*.hbm)的配置。

  • 2.1.类级别注解

@entity
@entity注解是hibernate框架中的类级别注解之一,@entity注解常常用于放在实体类类头前。该注解还可以搭配应用的属性有:name - 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的“gernerator”值中。

@Table
@Table与@entity配合使用。只能标注在实体的class处,表示实体对应的数据库表名。@Table中的可选属性schema与catalog可以用来解决命名冲突问题。不同数据库对schema、catalog的支持不同

@Embeddable表示一个非Entity类可以嵌入到另一个Entity类中作为属性而存在。
@Embeddable不生成独立的表,可以理解@Embeddable注解类为属性集。
这里写图片描述
这里写图片描述

  • 2.2属性级别注解

@Id
@Id 映射生成主键(一个实体只能有一个属性被映射为主键,一般放在该主键的get()方法前面)
a.对于复合主键,实体类必须实现serializable接口(声明式接口,不需要实现任何方法)
b.将 String类型 的属性设置成主键是一定要指定该属性的长度,可以用 Column length 注解来指定,不然 MySQL 会默认让其长度为255,而 MySQL 主键的长度不允许太长。

@GeneratorValue指定主键的生成策略.
如果一个主键没有添加@GeneratorValue注解,则就是一个普通的主键,无生成策略.
当主键是int类型时,此时可以使用自动增长类型(非int不行),该注解默认就是auto类型,根据底层数据库自动选择策略.
如果想要主键采用手工赋值的方式,要使用@GeneratedValue注解的generator属性指定主键生成器的名称,并且使用@GenericGenerator注解定义主键生成器.
例子:

@Id@GeneratedValue(generator="text")@GenericGenerator(name="text",strategy="assigned")private String sid;

@GeneratedValue的generator属性要与@GenericGenerator的name属性保持一致.表示@GeneratedValue所指定的主键生成器为@GenericGenerator定义的主键生成器.

@Column
@Column映射表的列(存在多表关联时,该注解可映射对应的关联关系,即外键)@Column描述了数据库表中该字段的详细定义。
一些特别的属性:
insertable:可选,表示在ORM框架执行插入操作时,该字段是否应出现在INSERT语句中,默认为true;
updateable:可选,表示在ORM框架执行更新操作时,该字段是否应出现在UPDATE语句中,默认为true,对于一经创建就不能修改的字段,该属性非常有用,如对于birthday字段。

@Transient 定义暂态属性
表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic。

阅读全文
1 0
原创粉丝点击