Annotation 注解(hibernate3版本)
1.Hibernate的annotation版本实际上使用的是javaEE中的JPA(java persistence api)所以需要导入一个jpa的jar包
2.实体类不再需要配置文件,使用注解即可
3.把实体类加入到主配置文件中
4.使用Annotation版本读取配置文件使用AnnotationConfiguration
* 1.用@interface来定义注解类
*
* 关键的问题是,看到这个注解需要干什么这个是一个复杂的过程
*
* 1.用java的反射判断一个类,或者一个方法或者成员变量...上面是否有注解
*
*
* 2.注解默认是给java的编译器查看的
*
*/
注意:
在创建表的功能中@ManyToOne和@OneToOne没有任何区别
每一个注解都有两个功能:1.用来映射的 2.告诉hibernate是如何来加载数据
先写单向关联,单向关联的映射如果没有问题,再写双向关良
双向关联的另一端加注解已经不需要映射了,只需要提供加载数据的功能
mappedBy即可
在使用注解时:
@ManyToOne
@OneToOne
//是在当前表中添加一个外键
@OneToMany
@ManyToMany
//是多添加一张表
//元注解:可以加在注解上的注解
//Retention:用来指定当前的注解放在哪个阶段,给谁看,默认是给java编译器看
//Target:用来指定当前的注解可以放在类的什么位置
//如果注解中有且只有一个属性value的时候,写注解可以省略value=
注解放在属性上好,因为成员变量是私有的不应该让任何人访问
放在成员变量上,hibernate还需要判断你的成员变量上有没有这些注解。相当于让hibernate直接访问了你的成员变量
注解也放在get方法上(加载数据)。
同样,使用注解也可以表示四种映射
① ManyToOne (student—classes)
直接在student实体类中添加相关注解
在相关get方法上设置映射类型,以及外键关联
在表中设置主键,以及增长类型
然后在classes实体类也进行相关注解
Classes端对应于student应是OneToMany注解,但不需要映射了,只需要提供加载数据的功能
②OneToOne
1.唯一外键关联
2.主键关联映射
③ ManyToMany
Teacher---course
Manytomany 与course的设置一致(中间表名 字段)
④ oneToMany 与manyToOne设置相近
如果使用的是0racle数据库,注解有所不同
Id的生成方式不同
需要添加一个sequenc.
同时 对于时间类型的属性可以设置相关注解来说明需要的类型
此处是具体日期+时间类型, 但还有时间,日期分开的类型参数
如果不希望某个属性在表中出现 可以设为瞬时的