三、Hibernate的Annotationjava
特别注意:Hibernate的Annotation要依赖于JPA包。数组
在Hibernate的3.5以前都须要下载Hibernate的Annotation的jar包,在3.5以后Hibernate的Annotation jar包已
经集成到Hibernate包中了。app
3.一、基本映射fetch
//注意是javax.persistence.Entity @Entity //设置表名 @Table(name="t_user") public class User { private int id; private String username; private String password; private String nickname; private Date born; private Date createDate; //@Column能够为这个字段进行定义 @Column(name="create_date") public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } //标志为id属性 @Id //GeneratedValue表示自动递增 @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; }
3.二、一对一this
@Entity @Table(name="t_id_card") public class IDCard { private int id; private String no; private Person person; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } @OneToOne //@JoinColumn能够设置外键的名称。 //只要使用了OneToOne就会在本身的表中增长外键。 @JoinColumn(name="pid") public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; }
@Entity @Table(name="t_person") public class Person { private int id; private String name; private IDCard idCard; //只要设置了@OneToOne就会在本身的表中增长外键,因此只有设置mappedBy="本身在对端的属性名称" //才能说明关系由对方维护 @OneToOne(mappedBy="person") //对端的属性名称,说明关系由对方来维护 public IDCard getIdCard() { return idCard; } public void setIdCard(IDCard idCard) { this.idCard = idCard; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }
3.三、一对多ssr
m:1单向:code
@ManyToOne(fetch=FetchType.LAZY) //延迟加载 //外键名称 @JoinColumn(name="cid") public Classroom getClassroom() { return classroom; } public void setClassroom(Classroom classroom) { this.classroom = classroom; }
1:m单向:xml
@OneToMany //加入到对方表中的外键 @JoinColumn(name="cid") //等于xml中的lazy="extra" @LazyCollection(LazyCollectionOption.EXTRA) public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; }
双向:ci
@ManyToOne(fetch=FetchType.LAZY) //延迟加载 //外键名称 @JoinColumn(name="cid") public Classroom getClassroom() { return classroom; } public void setClassroom(Classroom classroom) { this.classroom = classroom; } @OneToMany(mappedBy="classroom") //@JoinColumn(name="cid") //设置了mappedBy就已经等于说明由对方维护关系,因此不一样在设置JoinColumn @LazyCollection(LazyCollectionOption.EXTRA) public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; }
3.四、多对多get
多对多双向:
@ManyToMany //name="t_role_admin"表示关联表的名称, //joinColumns={@JoinColumn(name="rid")}表示本身在关联表中的外键名称,是数组 //inverseJoinColumns={@JoinColumn(name="aid")}表示对方在关联表中的外键名称,也是数组 @JoinTable(name="t_role_admin",joinColumns={@JoinColumn(name="rid")}, inverseJoinColumns={@JoinColumn(name="aid")}) public Set<Admin> getAdmins() { return admins; } public void setAdmins(Set<Admin> admins) { this.admins = admins; } @ManyToMany(mappedBy="admins") //由对方维护关系 public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; }
两个一对多:
@OneToMany(mappedBy="course") @LazyCollection(LazyCollectionOption.EXTRA) public Set<TeacherCourse> getTcs() { return tcs; } public void setTcs(Set<TeacherCourse> tcs) { this.tcs = tcs; } @OneToMany(mappedBy="teacher") @LazyCollection(LazyCollectionOption.EXTRA) public Set<TeacherCourse> getTcs() { return tcs; } public void setTcs(Set<TeacherCourse> tcs) { this.tcs = tcs; } @ManyToOne @JoinColumn(name="tid") public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } @ManyToOne @JoinColumn(name="cid") public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; }