日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
對HibernateFormula作用的全析

Hibernate Formula作用很強大,下面我們具體來講述Hibernate Formula的應(yīng)用,希望對大家有很大的幫助。

成都創(chuàng)新互聯(lián)公司專注于成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

閱讀對象:

  1.已經(jīng)在使用Hibernate JPA完成持久化映射的朋友。

  2.在網(wǎng)上搜索Formula并通通搜到轉(zhuǎn)載oralce一篇技術(shù)文章或hibernate annotations技術(shù)文檔的朋友。

  3.發(fā)現(xiàn)@Formula不能使用并想Ctrl+Delete hibernate jar包,然后砸爛顯示器的朋友。

本文將說明如何使用@Formula,并且說明在哪幾種情況下@Formula會失靈。

1.Hibernate Formula作用

引用Hibernate annotations技術(shù)文檔中的解釋可以很好的說明@Formula的作用,但它確實沒有說清楚怎么使用,并且給出的示例是用不了的,這讓我浪費了好幾個鐘頭的時間!

Hibernate Formula作用就是說白了就是用一個查詢語句動態(tài)的生成一個類的屬性,比如java eye登陸之后 收件箱顯示有幾封未讀郵件的數(shù)字,就是一條select count(*)...構(gòu)成的虛擬列,而不是存儲在數(shù)據(jù)庫里的一個字段。用比較標(biāo)準(zhǔn)的說法就是:有時候,你想讓數(shù)據(jù)庫,而非JVM,來替你完成一些計算,也可能想創(chuàng)建某種虛擬列,你可以使用sql片段,而不是將屬性映射(物理)列。這種屬性是只讀的(屬性值由公式求得).Formula甚至可以包含sql子查詢

Formula真的這么強大嗎?確實,它很好很強大,節(jié)省了不少代碼!

2.使用Formula

 
 
 
  1. package aa;    
  2.    
  3. import static javax.persistence.GenerationType.IDENTITY;    
  4.    
  5. import javax.persistence.Entity;    
  6. import javax.persistence.GeneratedValue;    
  7. import javax.persistence.Id;    
  8. import javax.persistence.Table;    
  9.    
  10. import org.hibernate.annotations.Formula;    
  11.    
  12. /**   
  13.  * 注解必須是在屬性上的,如果有任何一個注解在方法上,那么@Formula將失效   
  14.  * @author 昆明蜂鳥軟件   
  15.  * @version 0.1.0 2008-7-15 下午06:09:38   
  16.  */   
  17. @Entity   
  18. @Table(name = "user", catalog = "test")    
  19. public class User {    
  20.         
  21.     @Id   
  22.     @GeneratedValue(strategy = IDENTITY)    
  23.     private int id;    
  24.    
  25.     @Formula("(select COUNT(*) from user)")    
  26.     private int count;    
  27.    
  28.     public int getId() {    
  29.         return id;    
  30.     }    
  31.    
  32.     public void setId(int id) {    
  33.         this.id = id;    
  34.     }    
  35.    
  36.     public int getCount() {    
  37.         return count;    
  38.     }    
  39.    
  40.     public void setCount(int count) {    
  41.         this.count = count;    
  42.     }    
  43. }   
  44. package aa;
  45. import static javax.persistence.GenerationType.IDENTITY;
  46. import javax.persistence.Entity;
  47. import javax.persistence.GeneratedValue;
  48. import javax.persistence.Id;
  49. import javax.persistence.Table;
  50. import org.hibernate.annotations.Formula;
  51. /**
  52. * 注解必須是在屬性上的,如果有任何一個注解在方法上,那么@Formula將失效
  53. * @author 昆明蜂鳥軟件
  54. * @version 0.1.0 2008-7-15 下午06:09:38
  55. */
  56. @Entity
  57. @Table(name = "user", catalog = "test")
  58. public class User {
  59. @Id
  60. @GeneratedValue(strategy = IDENTITY)
  61. private int id;
  62. @Formula("(select COUNT(*) from user)")
  63. private int count;
  64. public int getId() {
  65. return id;
  66. }
  67. public void setId(int id) {
  68. this.id = id;
  69. }
  70. public int getCount() {
  71. return count;
  72. }
  73. public void setCount(int count) {
  74. this.count = count;
  75. }
  76. }

數(shù)據(jù)庫表:Sql代碼

 
 
 
  1. CREATE TABLE  `test`.`user` (    
  2.   `id` int(10) unsigned NOT NULL auto_increment,    
  3.   PRIMARY KEY  USING BTREE (`id`)    
  4. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

細(xì)節(jié)1.使用@Formula 你的注解必須是在屬性上,如果有一個注解在方法上,那么@Formula將失效。這個我是做過實驗的,比如把以上的java文件改為:

Java代碼

 
 
 
  1. package aa;    
  2.    
  3. import static javax.persistence.GenerationType.IDENTITY;    
  4.    
  5. import javax.persistence.Entity;    
  6. import javax.persistence.GeneratedValue;    
  7. import javax.persistence.Id;    
  8. import javax.persistence.Table;    
  9.    
  10. import org.hibernate.annotations.Formula;    
  11.    
  12. /**   
  13.  * 注解必須是在屬性上的,如果有任何一個注解在方法上,那么@Formula將失效   
  14.  * @author 昆明蜂鳥軟件   
  15.  * @version 0.1.0 2008-7-15 下午06:09:38   
  16.  */   
  17. @Entity   
  18. @Table(name = "user", catalog = "test")    
  19. public class User {    
  20.         
  21.     private int id;    
  22.    
  23.     @Formula("(select COUNT(*) from user)")    
  24.     private int count;    
  25.         
  26.     @Id   
  27.     @GeneratedValue(strategy = IDENTITY)    
  28.     public int getId() {    
  29.         return id;    
  30.     }    
  31.    
  32.     public void setId(int id) {    
  33.         this.id = id;    
  34.     }    
  35.    
  36.     public int getCount() {    
  37.         return count;    
  38.     }    
  39.    
  40.     public void setCount(int count) {    
  41.         this.count = count;    
  42.     }    
  43. }   
  44. package aa;
  45. import static javax.persistence.GenerationType.IDENTITY;
  46. import javax.persistence.Entity;
  47. import javax.persistence.GeneratedValue;
  48. import javax.persistence.Id;
  49. import javax.persistence.Table;
  50. import org.hibernate.annotations.Formula;
  51. /**
  52. * 注解必須是在屬性上的,如果有任何一個注解在方法上,那么@Formula將失效
  53. * @author 昆明蜂鳥軟件
  54. * @version 0.1.0 2008-7-15 下午06:09:38
  55. */
  56. @Entity
  57. @Table(name = "user", catalog = "test")
  58. public class User {
  59. private int id;
  60. @Formula("(select COUNT(*) from user)")
  61. private int count;
  62. @Id
  63. @GeneratedValue(strategy = IDENTITY)
  64. public int getId() {
  65. return id;
  66. }
  67. public void setId(int id) {
  68. this.id = id;
  69. }
  70. public int getCount() {
  71. return count;
  72. }
  73. public void setCount(int count) {
  74. this.count = count;
  75. }
  76. }

這樣@Formula就不可以運行?。?!我前邊就是被Hibernate官方的文檔給搞暈了。

細(xì)節(jié)2.既然@Formula 是一個虛擬列,那么數(shù)據(jù)庫中不需要建這一列,同樣可以,如果有個列存在,hibernate也會將   其忽略。以上示例中的user就沒有count列。

細(xì)節(jié)3.sql語句必須寫在()中,這個以前也有人說過。

細(xì)節(jié)4.如果有where子查詢,那么表需要用別名,比如 select COUNT(*) from user where id=1 是錯的

而select COUNT(*) from user u where u.id=1是正確的

細(xì)節(jié)5.只要是你在數(shù)據(jù)庫的sql控制臺執(zhí)行過的語句,并且使用了表別名,那么@Formula都應(yīng)該是支持的。

確實@Formula是一個很常用且好用的東西!希望這篇文章能幫助你~~


本文題目:對HibernateFormula作用的全析
網(wǎng)站URL:http://www.5511xx.com/article/ccogijp.html