Google Code Prettify

2017年1月2日 星期一

JPA + Spring: 繼承 (@MappedSuperclass)


在資料庫的設計中,有時會遇到如上的情況,兩個 table 屬性相同,都是儲放可登入系統的人,所需要的欄位也有許多重複,但是因為"管理者"和"使用者"是由不同介面登入,進入系統後可使用的功能也非常不同,因此被分別放在兩個 table。當發生這種狀況時,透過 ORM,在程式中可以將相同的欄位提取出來成為 super class,先來看一下 Administrator 怎麼寫。
 1 @Entity
 2 @Table(
 3         name="ADMINISTRATOR",
 4         uniqueConstraints = {
 5             @UniqueConstraint(columnNames = "EMAIL")
 6         })
 7 public class Administrator extends AbstractUser implements Serializable {
 8     private static final long serialVersionUID = 4001989953339069879L;
 9     
10     private String department;
11     private String roleId;
12     private String status;
13     
14     public String getDepartment() {
15         return department;
16     }
17     public void setDepartment(String department) {
18         this.department = department;
19     }
20     
21     public String getRoleId() {
22         return roleId;
23     }
24     public void setRoleId(String roleId) {
25         this.roleId = roleId;
26     }
27     
28     public String getStatus() {
29         return status;
30     }
31     public void setStatus(String status) {
32         this.status = status;
33     }
34     
35     @Override
36     public String toString() {
37         return "Administrotor [department=" + department + ", roleId=" + roleId + ", status=" + status + ", toString()="
38                 + super.toString() + "]";
39     }
40 }
兩個 table 共有的欄位被提取出來放到 AbstractUser 類別,其餘的欄位寫法和一般的 Entity 並沒有不同,再來看一下 AbstractUser 的寫法。
 1 @MappedSuperclass
 2 public class AbstractUser {
 3     private String email;
 4     private String password;
 5     private String occupation;
 6     private Date ctime;
 7     private Date lastLogin;
 8     
 9     @Id
10     public String getEmail() {
11         return email;
12     }
13     public void setEmail(String email) {
14         this.email = email;
15     }
16     public String getPassword() {
17         return password;
18     }
19     public void setPassword(String password) {
20         this.password = password;
21     }
22     public String getOccupation() {
23         return occupation;
24     }
25     public void setOccupation(String occupation) {
26         this.occupation = occupation;
27     }
28     public Date getCtime() {
29         return ctime;
30     }
31     public void setCtime(Date ctime) {
32         this.ctime = ctime;
33     }
34     public Date getLastLogin() {
35         return lastLogin;
36     }
37     public void setLastLogin(Date lastLogin) {
38         this.lastLogin = lastLogin;
39     }
40     
41     @Override
42     public String toString() {
43         return "AbstractUser [email=" + email + ", password=" + password + ", occupation=" + occupation + ", ctime="
44                 + ctime + ", lastLogin=" + lastLogin + "]";
45     }
46 }
如上,被提取出來成為上層類別,要在 class 前加上 @MappedSuperclass,這個上層類別也和 entity 一樣寫法,甚至 primary key 欄位也可以放在這 (第 9 行)。




【日劇 - 戀仲】
福士蒼汰和本田翼主演的純愛日劇,從青梅竹馬到步入禮堂,雖然歷經波折,雖然到最後一集編劇仍試著要製造點懸疑,但是,這類的戲大致上94%會是圓滿的結局,所以那個懸疑的效果真的太多餘了 ...
劇中福士蒼汰主演的三浦葵不斷的出現這種狂奔的畫面,我只能說,年輕真好! 要個中年人這麼演的話肯定吃不消!
上圖右邊是劇中男主角的競爭對手蒼井翔太 (野村周平 飾),左邊是三位主要人物之外最重要的配角金澤公平 (太賀 飾),是個對朋友非常熱心的人,當然,我知道編劇和導演想要塑造的是正面的形象,但是,說實在的,他的熱心已經過頭了! 往往過度的介入別人的人生,這我就不太能欣賞了!
本田翼不用特別形容她的漂亮,是男人看了都知道! 她演過不少日劇、日影了,一直到這兩三年戲份才多了起來,在本劇中她的演技真的很生硬,連走路的樣子都很生硬 … Orz ... 純愛戲嘛~ 女主角長得好看比演的好重要,不然叫觀眾要怎麼投入劇情裡呢?!
這是第一集一開頭演高中生時期,她幫男主角三浦葵加油的畫面。她真的蠻漂亮的,再放了一張 … XD
過一年,也就是2016年,她在「校閱女王」中演重要的配角,這時候她的演技倒是進步不少,人是會成長的啊 ~ (下圖)
到這邊介紹了好幾個人了,再介紹最後一位,是主角三浦葵的前女友冴木瑠衣子 (市川由衣 飾),以外表來說是不如本田翼亮麗,但也相當漂亮,劇中她是個溫柔的女人,工作上的表現又相當不錯,這應該也是個相當有女性媚力的吧?! 這年頭有能力的女人也是相當吸引人的!
結尾了,看一下重逢後一個重要轉折,也是在這一刻結局就確定了!
一般來說,這種男人第一次偷偷親女人,女人是知道的,如果女人喜歡這個男人,就會繼續裝睡,算是一種默許吧 ~

沒有留言:

張貼留言