Hibernate 注解试用
来源:互联网 发布:区域高程数据 编辑:程序博客网 时间:2024/05/16 07:56
简述:
记录 Hibernate的JPA(Java Persistence API) 注解的部分用法
内容:
1. 由于数据库中,每张表都有ID属性,所以方便起见,在做Hibernate持久化的时候,不妨让所有持久化对象都继承同一个IDEntity
IDEnitty.java类,其中ID是通过UUID方法,自动生成的
@XmlAccessorType(XmlAccessType.FIELD)@XmlRootElement@MappedSuperclasspublic class IDEntity implements Serializable {/** * */private static final long serialVersionUID = 7245926530433395470L; @Id @Column(name ="ID", nullable = false, unique = true) @GeneratedValue(generator = "idGenerator") @GenericGenerator(name = "idGenerator", strategy = "uuid")private String id; public IDEntity(){ } public IDEntity(String id){ this.id = id; }public String getId() {return id;}public void setId(String id) {this.id = id;}}
2. 之后如果有一个新的持久化对象,就可以继承这个类了例如
Student.java类
@Entity@Table(name="STUDENT")public class Student extends IDEntity {/** * */private static final long serialVersionUID = 965916043460317019L;/** * 名称 */private String name="";public String getName() {return name;}public void setName(String name) {this.name = name;}}
3. 但是在实际中,表与表之间的关联关系或是从属关系也很常见
Student 表
- ID
- teacherID
- name
Teacher 表
- ID
- name
下面来设计一个从属关系 学生和老师 多对一的关系
Teacher.java
@Entity@Table(name="TEACHER")public class Teacher extends IDEntity { /** * */private static final long serialVersionUID = 5286263216193082850L;/** * 老师名称 */private String name="";@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)@JoinColumn(name="teacherID")private Set<Student> students = new HashSet<Student>();public String getName() {return name;}public void setName(String name) {this.name = name;} public Set<Student> getStudents() { return students; } public void setStudents(Set<Students> students) { this.students = students; }public Teacher(String name) {this.name = name;}public Teacher() {}}
而后学生表中有一个teacherID 域外键到老师表,是从属关系
Student.java
@Entity@Table(name="STUDENT")public class Student extends IDEntity {/** * */private static final long serialVersionUID = 965916043460317019L;@ManyToOne(cascade=CascadeType.ALL)@JoinColumn(name="teacherID")private Teacher teacher = new Teacher();/** * 名称 */private String name="";public String getName() {return name;}public void setName(String name) {this.name = name;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}}
这里我们需要关注下
1) 级联问题 CascadeType
CascadeType类中有这样几个常量,
ALL 以下四个都有
PERSIST 级联新建
MERGE 调用session.merge()触发
REFRESH 调用session.refresh()触发 重新去session中取对象,如果没有就会报错
REMOVE 级联删除
2) FetchType
FetchType.LAZY懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载
FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载
- Hibernate 注解试用
- HIBERNATE面试用
- Hibernate Search试用总结
- hibernate 注解
- hibernate注解
- hibernate注解
- hibernate注解
- Hibernate注解
- Hibernate 注解
- Hibernate注解
- hibernate注解
- hibernate 注解
- hibernate注解
- hibernate注解
- Hibernate注解
- hibernate注解
- hibernate注解
- hibernate注解
- Android Vold架构
- 本地计算机上的OracleOraDb10g_home1TNSListener服务启动后停止
- android工程中不自动生成Android Dependencies的解决方式
- 业余数学牛人的数学自学心得
- Java中ConcurrentHashMap学习
- Hibernate 注解试用
- css+div简单的菜单导航
- 给hadoop 0.20.2打patch补丁
- ubuntu 11.04 vm中挂载windows共享目录
- JVM阅读记录
- Action<T>和Func<T>泛型委托
- 侦测Air运行时环境或系统平台
- mysql的表分区
- 中文截取