hibernate 注解配置一对多关系
从hibernate 2.5开始就可以使用annotation实现实体关系的映射了,减少了配置hbm文件的繁琐,而且annotation也是一种趋势,现在的SSH2的整合都是完全可以用annotation来实现。在以前实现一对多关联的关联式都是使用hbm文件,今天我们来使用annotation试试,同样也能实现其功能。
1.数据库:oracle数据库,有person和address二张表,一对多的关系。
数据库:
- create table person
- (
- id number(4) not null,
- uname varchar (20)
- );
- create table address
- (
- id number(4) not null,
- address varchar(20) not null,
- personId number(4) not null
- )
- alter table person
- add constraint primary_id parmary key(id)
- deferrable initially deferred;
2.Person实体类:
- <span style="font-size:14px;">package com.zengguo.po;
- import java.io.Serializable;
- import java.util.HashSet;
- import java.util.Set;
- import javax.persistence.CascadeType;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.OneToMany;
- import javax.persistence.Table;
- import org.hibernate.annotations.Fetch;
- import org.hibernate.annotations.FetchMode;
- import org.hibernate.annotations.GenericGenerator;
- import org.hibernate.annotations.Parameter;
- @SuppressWarnings(“serial”)
- @Entity
- @Table(name = “person”)
- public class Person implements Serializable {
-
- @Id
- @GenericGenerator(name = “personGenericGenerator”, strategy = “sequence”,
- parameters = { @Parameter(value = “hibernate_seq”, name = “sequence”) })
- @GeneratedValue(generator=”personGenericGenerator”)
- private long id;
- @Column(name=”uname”)
- private String uname;
- @OneToMany(targetEntity=Address.class,cascade=CascadeType.ALL)
- @Fetch(FetchMode.JOIN)
-
- @JoinColumn(name=”personId”,updatable=false)
- private Set<Address> sets = new HashSet<Address>();
- public Set<Address> getSets() {
- return sets;
- }
- public void setSets(Set<Address> sets) {
- this.sets = sets;
- }
- public Person() {
- super();
- }
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- public String getUname() {
- return uname;
- }
- public void setUname(String uname) {
- this.uname = uname;
- }
- }</span>
3.Address实体类
- <span style="font-size:14px;">package com.zengguo.po;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.ManyToOne;
- import javax.persistence.Table;
- import org.hibernate.annotations.GenericGenerator;
- import org.hibernate.annotations.Parameter;
- @SuppressWarnings(“serial”)
- @Entity
- @Table(name = “address”)
- public class Address implements java.io.Serializable {
-
- @Id
- @GenericGenerator(name = “addressGenericGenerator”, strategy = “sequence”,
- parameters = { @Parameter(value = “hibernate_seq”, name = “sequence”) })
- @GeneratedValue(generator = “addressGenericGenerator”)
- private long id;
- @Column(name = “address”)
- private String address;
-
- @ManyToOne(targetEntity = Person.class)
- @JoinColumn(name=”personId”,updatable=false)
- private Person person;
- public Address() {
- super();
- }
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public Person getPerson() {
- return person;
- }
- public void setPerson(Person person) {
- this.person = person;
- }
- }</span>
hibernate一对多mappedBy的用法:(班级classes和学生student,一对多的关系)