在scala里调用Hibernate JPA

虽然scala里也能直接使用hibernate逆向工程生成的entity文件,但是使用scala可以大大减少代码量。

pojo在java中的定义如下

java 代码
  1. @Entity  
  2. @Table(name = "mytable", catalog = "mydb")   
  3. public class MyTable implements java.io.Serializable {   
  4.   
  5.     private int id;   
  6.   
  7.     private String title;   
  8.   
  9.     private String summary;   
  10.   
  11.     private Date date;   
  12.   
  13.     private String tags;   
  14.   
  15.     public MyTable () {   
  16.     }   
  17.   
  18.     public MyTable (int id, String title, Date date) {   
  19.         this.id = id;   
  20.         this.title = title;   
  21.         this.date = date;   
  22.     }   
  23.   
  24.     public MyTable (int id, String title, String summary, Date date,   
  25.             String tags) {   
  26.         this.id = id;   
  27.         this.title = title;   
  28.         this.summary = summary;   
  29.         this.date = date;   
  30.         this.tags = tags;   
  31.     }   
  32.   
  33.     @Id  
  34.     @Column(name = "id", unique = true, nullable = false)   
  35.     public int getId() {   
  36.         return this.id;   
  37.     }   
  38.   
  39.     public void setId(int id) {   
  40.         this.id = id;   
  41.     }   
  42.   
  43.     @Column(name = "title", nullable = false, length = 256)   
  44.     public String getTitle() {   
  45.         return this.title;   
  46.     }   
  47.   
  48.     public void setTitle(String title) {   
  49.         this.title = title;   
  50.     }   
  51.   
  52.     @Column(name = "summary")   
  53.     public String getSummary() {   
  54.         return this.summary;   
  55.     }   
  56.   
  57.     public void setSummary(String summary) {   
  58.         this.summary = summary;   
  59.     }   
  60.   
  61.     @Temporal(TemporalType.DATE)   
  62.     @Column(name = "date", nullable = false, length = 0)   
  63.     public Date getDate() {   
  64.         return this.date;   
  65.     }   
  66.   
  67.     public void setDate(Date date) {   
  68.         this.date = date;   
  69.     }   
  70.   
  71.     @Column(name = "tags")   
  72.     public String getTags() {   
  73.         return this.tags;   
  74.     }   
  75.   
  76.     public void setTags(String tags) {   
  77.         this.tags = tags;   
  78.     }   
  79.   
  80. }   

Scala由于有内置的BeanProperty支持,上面的代码缩减为下面的,一切setter/getter函数都免了,当然愿意手工加也可以

scala 代码
  1. @Entity  
  2. @Table{val name = "mytable", val catalog = "mydb"}   
  3. class MyTable extends  java.io.Serializable {   
  4.   
  5.         @Id  
  6.         @Column{val name = "id", val unique = true, val nullable = false}   
  7.         @BeanProperty  
  8.         var id: int = _   
  9.   
  10.         @Column{val name = "title", val nullable = false, val length = 256}   
  11.         @BeanProperty  
  12.         var title: String = _   
  13.   
  14.         @Column{val name = "summary"}           
  15.         @BeanProperty  
  16.         var summary: String = _   
  17.   
  18.         @Temporal(TemporalType.DATE)   
  19.         @Column{val name = "date", val nullable = false, val length = 0}           
  20.         @BeanProperty  
  21.         var date: Date = _   
  22.   
  23.         @Column{val name = "tags"}           
  24.         @BeanProperty  
  25.         var tags: String = _   
  26.   
  27.         def this(id: int, title: String, date: Date) =  {   
  28.                 this();   
  29.                 this.id = id;   
  30.                 this.title = title;   
  31.                 this.date = date;   
  32.         }   
  33.   
  34.         def this(id: int, title: String, summary: String, date: Date,    
  35.                         tags: String) = {   
  36.                this();   
  37.                 this.id = id;   
  38.                 this.title = title;   
  39.                 this.summary = summary;   
  40.                 this.date = date;   
  41.                 this.tags = tags;   
  42.         }   
  43. }  

访问也很简单

scala 代码
  1. val emf = Persistence.createEntityManagerFactory("helloworld")   
  2. val em = emf.createEntityManager()    
  3. var tests = em.createQuery(   
  4.         "from MyTable"  
  5.         ).getResultList()   
  6.   
  7. // 这里将java.util.List转换为scala的List,方便处理   
  8. val testsList = new scala.collection.jcl.BufferWrapper[MyTable] {   
  9.       override def underlying = tests    
  10. }   
  11.   
  12. for (test < - testsList) {   
  13.       println(test)   
  14.       println(test.title)   
  15.       println(test.summary)   
  16. }  

你可能感兴趣的:(java,jvm,scala,Hibernate,jpa)