实例二:(主键sequence策略)
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@Entity
public class Score {
@Id
@GeneratedValue(generator="seqs")
@GenericGenerator(name="seqs",strategy="sequence",parameters={@Parameter(name="sequence",value="seq_score")})
private Integer id;
private String scoreName;
private String author;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getScoreName() {
return scoreName;
}
public void setScoreName(String scoreName) {
this.scoreName = scoreName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
2.
使用 @OneToOne 注解可以建立实体bean之间的一对一的关联。
一对一关联有两种情况:
一是关联的实体都共享同样的主键,
二是其中一个实体通过外键关联到另一个实体的主键
(注意要模拟一对一关联必须在外键字段上添加唯一性约束).
@OneToOne注释指明Person 与IDCard为一对一关系,@OneToOne注释五个属性:targetEntity、cascade、fetch、optional 和mappedBy, fetch属性默认值是FetchType.EAGER。optional = true设置 idcard属性可以为null,也就是允讦没有身份证,未成年人就是没有身份证的。 targetEntity属性:Class类型的属性。定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。 cascade 属性:CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作, 而且这种关系是递归调用的。cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、 CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。 fetch属性:FetchType类型的属性。可选择项包括:FetchType.EAGER 和 FetchType.LAZY。 FetchType.EAGER 表示关系类(本例是OrderItem类)在主类加载的时候同时加载,FetchType.LAZY表示关系类在被访问时才加载。默认值是 FetchType.LAZY。 @OrderBy(value = "id ASC")注释指明加载元组时按id的升序排序(降序 "DESC") @OneToOne(optional = true, cascade = CascadeType.ALL, mappedBy = "person")
下面这个例子使用外键进行实体的关联。
@Entity
public class Customer implements Serializable {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="passport_fk")
public Passport getPassport() {
...
}
@Entity
public class Passport implements Serializable {
@OneToOne( mappedBy = "passport" )
public Customer getOwner() {
...
}
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@SuppressWarnings("serial")
@Entity
public class US implements Serializable {
@Id
@GeneratedValue(generator="seq")
@GenericGenerator(name="seq",strategy="sequence",parameters={@Parameter(name="sequence",value="seq_us")})
private Integer id;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="userid") //外键,userid references user2(id)
private User2 user2;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="scoreid")
private Score score;
private Integer grade;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public User2 getUser2() {
return user2;
}
public void setUser2(User2 user2) {
this.user2 = user2;
}
public Score getScore() {
return score;
}
public void setScore(Score score) {
this.score = score;
}
public Integer getGrade() {
return grade;
}
public void setGrade(Integer grade) {
this.grade = grade;
}
}