- package com.entity;
- import java.io.Serializable;
- import java.util.Date;
- import javax.persistence.CascadeType;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.OneToOne;
- import javax.persistence.Table;
- import javax.persistence.Temporal;
- import javax.persistence.TemporalType;
- /**
- * 關係維護端Person.java
- */
- @Entity
- @Table(name = "Person")
- public class Person implements Serializable {
- private Integer personid;//人員ID
- private String name;// 姓名
- private boolean sex;//性別
- private Short age;//年齡
- private Date birthday;//生日
- private IDCard idcard;//身份證號碼
- @Id
- @GeneratedValue
- public Integer getPersonid() {
- return personid;
- }
- public void setPersonid(Integer personid) {
- this.personid = personid;
- }
- @Column(name = "PersonName", nullable = false, length = 32)
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Column(nullable = false)
- public boolean getSex() {
- return sex;
- }
- public void setSex(boolean sex) {
- this.sex = sex;
- }
- @Column(nullable = false)
- public Short getAge() {
- return age;
- }
- public void setAge(Short age) {
- this.age = age;
- }
- /*
- * @Temporal主要是用來指明java.util.Date 或 java.util.Calendar 類型的屬性具體與數據庫(date,time,timestamp)三個類型中的那一個進行映射
- */
- @Temporal(value = TemporalType.DATE)
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- /*
- * @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")
- public IDCard getIdcard() {
- return idcard;
- }
- public void setIdcard(IDCard idcard) {
- this.idcard = idcard;
- }
- }
IDCard.java
- package com.entity;
- import java.io.Serializable;
- 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.OneToOne;
- import javax.persistence.Table;
- @Entity
- @Table(name = "IDCard")
- public class IDCard implements Serializable {
- private Integer id;//流水號
- private String cardno;//身份證號碼
- private Person person;//對應的人
- public IDCard() {
- }
- public IDCard(String cardno) {
- this.cardno = cardno;
- }
- @Id
- @GeneratedValue
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- @Column(nullable = false, length = 18, unique = true)
- public String getCardno() {
- return cardno;
- }
- public void setCardno(String cardno) {
- this.cardno = cardno;
- }
- /**
- * @OneToOne註釋指明IDCard與Person爲一對一關係,IDCard是關係被維護端,optional = false設置person屬性值不能爲null,也就是身份證必須有對應的主人。
- * @JoinColumn(name = "Person_ID", referencedColumnName ="personid",unique = true)指明IDCard對應表的Person_ID列作爲外鍵與
- * Person對應表的personid列進行關聯,unique= true 指明Person_ID 列的值不可重複。
- * @return
- */
- @OneToOne(optional = false, cascade = CascadeType.REFRESH)
- @JoinColumn(name = "Person_ID", referencedColumnName = "personid", unique = true)
- public Person getPerson() {
- return person;
- }
- public void setPerson(Person person) {
- this.person = person;
- }
- }