Hibernate映射文件的配置
Hibernate有两种方式配置持久化类:1、通过hbm.xml映射文件配置 2、通过注解配置
在hibernate.cfg.xml配置文件中hbm.xml文件的映射地址是用resource
举例:<mapping resource=”.../User.hbm.xml”/>
持久化类的映射地址是用class
举例:<mapping class=”xxx.User”/>
注意:resource的地址是由”/”分隔,class的地址是由”.”分隔
通过hbm.xml配置映射文件
<hibernate-mapping>
<class name=”xxx.User” table=”USER”> //映射类在项目中的位置,命名表名
<id name=”id” type=”integer”> //持久化类的属性名
<column name=”ID” precision=”22” scale=”0”/> //数据库里的字段名
<generator class=”sequence”/> //主键生成策略 这里是按照序列
</id>
<property name=”name” type=”string”>
<column name=”NAME” length=”20”/>
</property>
</class>
</hibernate-mapping>
通过注解配置映射文件
@Entity //告诉hibernate这是个映射持久化类
@Table(name=”User”) //表名
public class User{
private int id;
private String name;
@Id //设置主键
@Column(name=”ID”) //设置列名
//主键生成策略
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="gt") //使用自定义的序列
@SequenceGenerator(sequenceName="seq_1",name="gt")
public int getId(){
return id;
}
public void setId(){
This id = id;
}
@Column //如果不单独命名,生成的列名则为持久化类里所对应的属性名
public String getName(){
return name;
}
public void setName(){
This.name = name;
}
}
关联关系映射(一对多)
一对多的关联关系是指一的一方的主键对应到多的一方的外键。
举例: 一:student 多:classes
@Entity
@Table(name=”STUDENT”)
public class Student{
private int id;
private String name;
private Classes classes;
@Id
@column
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="gt")
@SequenceGenerator(sequenceName="seq_1",name="gt")
getId()
setId()
@Column
getName()
setName()
@ManyToOne(fetch=FetchType.LAZY) //指定多对一的关系 fetch设置抓取方式为延迟加载
@JoinColumn(name=”CLASSESID”) //外键列名为CLASSESID,一个学生对应一个班级
getClasses()
setClasses()
}
@Entity
@Table(name=”CLASSES”)
public class Classes{
private int id;
private String name;
private Set<Student> students = new HashSet<Student>(0);
@Id
@....
getId..
setId
..
//cascade设置级联的范围,这里设置为ALL意思是对于classes的所有操作都会影响到student
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="classes") //mappedBy设置由哪一方来进行维护 这里设置一的一方来维护两个表的关系
getStudents()
setStudents()
}