表名的映射
//代表此類參與ORM映射,此注解必須要有
@Entity
//代表user這個類映射了一個表user50,如果表名和類名一樣,此注解可以省略
@Table(name="user50")
public class User {
主鍵的映射
//主鍵,此注解必須要有
@Id
//數據庫表中主鍵列名為id,如果實體類屬性名和列名相同,此注解可以省略
@Column(name="id")
//主鍵的維護策略
@GenericGenerator(name="inc50",strategy="increment")
@GeneratedValue(generator="inc50")
private Integer userID;
屬性映射成表的字段
//@Column(name="name")//此屬性要映射到名為name的列上,若屬性名和列名相同,則注解可以省略 private String name;
日期類型的映射
@Column(name="birth") //如果屬性是日期格式,可以設置日期的保存規格 //time:只保存時間 date:只保存日期 timestamp:(默認)日期+時間 @Temporal(TemporalType.DATE) private Date birthday;
表之間的關系是一對一的映射
Person實體中:
//關系屬性:告知Passport它的關系屬性 //mappedBy"對方中映射着外鍵的關系屬性==Passport表中有一個關系屬性,名字是person50" @OneToOne(mappedBy="person50") //ALL:增刪改都可以級聯(cascade) //save-update:增加和更新可以級聯 //delete:刪除可以級聯 //如果不設置,則增刪改都不可以級聯 //注意:查詢例外,不受級聯權限的控制,默認級聯。 @Cascade(value=CascadeType.ALL) private Passport passport50;
Passport實體中:
//關系屬性 @OneToOne //JoinColumn:代表是從表,name的值代表:Passport表中外鍵名為person_id @JoinColumn(name="person_id") //@Cascade private Person person50;
表之間的關系是一對多的映射
user表 1: n order表
user實體:
@OneToMany(mappedBy="user") //ALL:增刪改都可以級聯(cascade) //save-update:增加和更新可以級聯 //delete:刪除可以級聯 //如果不設置,則增刪改都不可以級聯 //注意:查詢例外,不受級聯權限的控制,默認級聯。 @Cascade(value=CascadeType.DELETE) private Set<Order> orders=new HashSet<Order>();
order實體:
//關系屬性 @ManyToOne //JoinColumn:name代表關系屬性映射的列 @JoinColumn(name="user_id") private User user;
表之間的關系是多對多的映射
Student n:n Course 關系表: r_c_s
Student實體:
//關系屬性
//EAGER: 查詢時關聯的數據也同時取出放入內存中,因為在內存里,所以在session外也可以取 @ManyToMany(fetch=FetchType.EAGER) //中間表,兩個外鍵: joinColumns=指向自己的外鍵 inverseJoinColumns=指向對方的外鍵 @JoinTable(name="r_c_s" ,joinColumns={@JoinColumn(name="stu_id")} ,inverseJoinColumns={@JoinColumn(name="cour_id")}) @Cascade(value=CascadeType.ALL) private Set<Course> courses=new HashSet<Course>();
Course實體:
//關系屬性 @ManyToMany @JoinTable(name="r_c_s" ,joinColumns={@JoinColumn(name="cour_id")} ,inverseJoinColumns={@JoinColumn(name="stu_id")}) @Cascade(value=CascadeType.ALL) private Set<Student> students=new HashSet<Student>();
