在hibernate中
来源:互联网 发布:阿里云如何升级配置 编辑:程序博客网 时间:2024/06/09 15:55
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式以后,发现使用annotation的方式可以更简介,所以这里就简单记录下通过annotation来配置各种映射关系,在hibernate4以后已经将annotation的jar包集成进来了,如果使用hibernate3的版本就需要引入annotation的jar包。
一、单对象操作
@Entity ---> 如果我们当前这个bean要设置成实体对象,就需要加上Entity这个注解
@Table(name="t_user") ----> 设置数据库的表名
public class User
{
private int id;
private String username;
private String password;
private Date born;
private Date registerDate;
@Column(name="register_date") ---> Column中的name属性对应了数据库的该字段名字,里面还有其他属性,例如length,nullable等等
public Date getRegisterDate()
{
return registerDate;
}
public void setRegisterDate(Date registerDate)
{
this.registerDate = registerDate;
}
@Id ---> 定义为数据库的主键ID (建议不要在属性上引入注解,因为属性是private的,如果引入注解会破坏其封装特性,所以建议在getter方法上加入注解)
@GeneratedValue ----> ID的生成策略为自动生成
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
............
}
最后只需要在hibernate.cfg.xml文件里面将该实体类加进去即可:
这样我们就可以写测试类来进行我们的CRUD操作了。
二、一对多的映射(one-to-many)
这里我们定义了两个实体类,一个是ClassRoom,一个是Student,这两者是一对多的关联关系。
ClassRoom类:
@Entity
@Table(name="t_classroom")
public class ClassRoom
{
private int id;
private String className;
private Set students;
public ClassRoom()
{
students = new HashSet();
}
public void addStudent(Student student)
{
students.add(student);
}
@Id
@GeneratedValue
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getClassName()
{
return className;
}
public void setClassName(String className)
{
this.className = className;
}
@OneToMany(mappedBy="room") ---> OneToMany指定了一对多的关系,mappedBy="room"指定了由多的那一方来维护关联关系,mappedBy指的是多的一方对1的这一方的依赖的属性 ,(注意:如果没有指定由谁来维护关联关系,则系统会给我们创建一张中间表)
@LazyCollection(LazyCollectionOption.EXTRA) ---> LazyCollection属性设置成EXTRA指定了当如果查询数据的个数时候,只会发出一条 count(*)的语句,提高性能
public Set getStudents()
{
return students;
}
public void setStudents(Set students)
{
this.students = students;
}
}
Student类:
@Entity
@Table(name="t_student")
public class Student
{
private int id;
private String name;
private int age;
private ClassRoom room;
- 在hibernate中
- 在hibernate中
- 在WebLogic中使用Hibernate
- 在Eclipse中使用Hibernate
- 在Eclipse中使用Hibernate
- 在Eclipse中使用Hibernate
- 在Eclipse中使用Hibernate
- 在Eclipse中使用Hibernate
- 在Eclipse中使用Hibernate
- 在spring中配置hibernate
- 在Spring中使用Hibernate
- 在Hibernate中批量处理
- 在hibernate中使用P6spy
- 在hibernate中使用P6spy
- 在GlassFish中应用Hibernate
- 在RCP中使用Hibernate
- 在GWT中使用Hibernate
- Hibernate在集群中应用
- 条款22:将成员变量声明为private
- Dijkstra算法
- dedecms标签:channel获取栏目列表标签
- 【LeetCode】Divide Two Integers
- oracle命令学习笔记(二)
- 在hibernate中
- webloigc webservice
- @ManyToOne(fetch=FetchType.LAZY)
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 我还太菜
- 分治思想的求最大子数组和代码实现(C++)
- 十道海量数据处理面试题与十个方法大总结
- failover inloving the physical standby
- GeneratedValue