亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

EJB 3.0開發指南之實體Bean的設計

2019-11-18 12:32:55
字體:
來源:轉載
供稿:網友

  在EJB3.0中開發實體Bean非常簡單,你可以象開發一般的java bean一樣編程,只需做少量的注釋。一個實體bean不需要實現Home接口或者Remote、Local接口。
  
  實體Bean通過EntityManager產生、查找、和持久層結合、從持久層收回等操作。
  
  JBoss的EJB3.0架構在Hibernate之上。
  
  注釋:
  
  @Entity:假如你要建立一個實體Bean的類,你必須在類上加上這個注釋,用來告訴容器這個類是實體Bean。這個Bean的主鍵由@Id指定。
  
  這個注釋的聲明如下:
  
  @Target(TYPE) @Retention(RUNTIME)
  
  public @interface Entity {
  
  String name() default "";
  
  EntityType entityType() default CMP;
  
  accessType access() default PROPERTY;
  
  int version() default 3;
  
  }
  
  name用來指定實體Bean的名稱,缺省和類名相同。
  
  EntityType用來指定此bean是容器治理的持久實體Bean還是Bean治理的持久實體Bean。可以是CMP和BMP兩種方式。
  
  AccessType用來指定容器訪問此EJB的持久化數據的方式。PROPERTY用來告訴容器使用get/set訪問持久化的數據(就是無Transient注釋的數據),FILED告訴容器直接訪問字段,字段應該聲明稱protected類型。
  
  為了提供給其他會話Bean等客戶端使用,這個Bean應實現Serializable接口。
  
  實體Bean必須由一個無參數的構造方法。
  
  可持久化的屬性包括:java的基本類型(int,long等)、String、BigInteger、BigDecimal、java.util.Date、Calendar、java.sql.Date、java.sql.Time、java.sql.Timestamp、byte[]、char[]、其他實體Bean類型、其他實體Bean的集合(Collection、Set,不支持List)。
  
  @Table
  
  用來指定此實體Bean使用的主表,有時候可能需要其他的表,參看后面的章節的介紹。UniqueConstraint注釋用來添加約束條件。
  
  @Id
  
  用來指定此實體Bean的主鍵。它可以有多種生成方式:
  
  TABLE:容器指定用底層的數據表確保唯一。
  
  SEQUENCE:使用數據庫的SEQUENCE列來保證唯一
  
  IDENTITY:使用數據庫的INDENTIT列來保證唯一
  
  AUTO:由容器挑選一個合適的方式來保證唯一
  
  NONE:容器不負責主鍵的生成,由調用程序來完成。
  
  @OnetoMany
  
  兩個實體Bean之間可能有一對多、多對一、一對一、多對多的關系,后面兩個關系在后面的例子中介紹。
  
  比如學生和各課分數之間就是一對多的關系。
  
  在EJB3.0中,一對多的關聯必須是雙向的,也就是說,必定有各多對一的關聯和它對應。
  
  OnetoMany注釋聲明如下:
  
  @Target({METHOD, FIELD}) @Retention(RUNTIME)
  
  public @interface OneToMany {
  
  String targetEntity() default "";
  
  CascadeType[] cascade() default {};
  
  FetchType fetch() default LAZY;
  
  }
  
  當我們使用這個注釋為get方法注釋時,假如使用JDK5.0的通用編程,返回集合Collection<目標實體類型>,那么就不需要指定targetEntity的類型,否則返回類型聲明為普通的Collection的話,就必須聲明targetEntity的類型。
  
  CascadeType指定了當這個實體Bean新建或者Merge的時候,與之關聯的實體需要怎樣的處理:
  
  MERGE:當主實體Bean被merge的時候、關聯的實體Bean也被merge
  
  CREATE:當主實體Bean被create的時候、關聯的實體Bean也被create
  
  REMOVE:當主實體Bean被evict的時候、關聯的實體Bean也被evict
  
  ALL:包括以上的情況
  
  FetchType指定從數據中讀取的方式:LAZY還是EAGER。LAZY只有當第一次訪問的時候,才從數據庫中得到相關的實體bean,EAGER則很積極,同主實體Bean一同產生。
  
  @ManytoOne
  
  我們知道一對多的關聯是雙向的。在關聯的實體Bean中必定聲明了由ManyToOne注釋的方法。
  
  @JoinColumn
  
  我們知道兩個實體可以關聯,但對應到Table中需要指定一個列作為外鍵。假如不指定name,那么認為主表中的列和附表中的主鍵有相同名稱的作為外鍵。假如不指定referencedColumnName,則認為外鍵對應副表的主鍵。
  
  @JoinColumns
  
  用來指示符合主鍵,在后面的章節中介紹。
  
  這個例子主要有以下幾個文件,這個例子主要實現了治理學生分數的功能。Student是一個實體Bean,治理學生的基本信息(姓名和各課分數),其中學生的分數又是一個實體Bean。TacherBean是一個無狀態的會話Bean,用來調用實體Bean。和前面的例子一樣,我們還是使用Client測試。
  
  Student.java:實體Bean。
  
  Score.java:實體Bean。
  
  Teacher.java:會話Bean的業務接口
  
  TeacherBean.java:會話Bean的實現類
  
  Client.java:測試EJB的客戶端類。
  
  jndi.properties:jndi屬性文件,提供訪問jdni的基本配置屬性。
  
  Build.xml:ant 配置文件,用以編譯、發布、測試、清除EJB。
  
  下面針對每個文件的內容做一個介紹。
  
  Student.java
  
  package com.kuaff.ejb3.entity;
  
  import javax.ejb.CascadeType;
  import javax.ejb.Entity;
  import javax.ejb.FetchType;
  import javax.ejb.GeneratorType;
  import javax.ejb.Id;
  import javax.ejb.JoinColumn;
  import javax.ejb.OneToMany;
  import javax.ejb.Table;
  import java.util.ArrayList;
  import java.util.Collection;
  import java.io.Serializable;
  
  @Entity
  @Table(name = "STUDENT")
  
  public class Student implements Serializable
  {
  //主鍵
  private int id;
  //學生名
  private String name;
  //學生的分數
  private Collection<Score> scores;
  //主鍵自動產生
  @Id(generate = GeneratorType.AUTO)
  public int getId()
  {
  return id;
  }
  
  public void setId(int id)
  {
  this.id = id;
  }
  
  public String getName()
  {
  return name;
  }
  
  public void setName(String name)
  {
  this.name = name;
  }
  
  public void addScores(String name,int number)
  {
  if (scores == null)
  {
  scores = new ArrayList<Score>();
  }
  Score score = new Score();
  score.setName(name);
  score.setNumber(number);
  score.setStudent(this);
  scores.add(score);
  }
  
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  @JoinColumn(name = "student_id")
  
  public Collection<Score> getScores()
  {
  return scores;
  }
  
  public void setScores(Collection<Score> scores)
  {
  this.scores = scores;
  }
  }
  
  Student.java實現了Student實體Bean,它提供學生的基本情況以及學生的得分情況,得分是另外一個實體Bean。Student實體Bean和Score實體Bean是一對多的關系,站在Score的角度看是多對一的關系。
  
  實體Bean需要使用@Entity做注釋,另外它指定這個實體Bean與表STUDENT對應(通過注釋@Table(name = "STUDENT")),你可以在JBOSS的數據庫中看到這個表。
  
  Score.java
  
  package com.kuaff.ejb3.entity;
  
  import java.io.Serializable;
  import javax.ejb.Entity;
  import javax.ejb.GeneratorType;
  import javax.ejb.Id;
  import javax.ejb.JoinColumn;
  import javax.ejb.ManyToOne;
  import javax.ejb.Table;
  
  @Entity
  @Table(name = "Score")
  
  public class Score implements Serializable
  {
  private int id;
  private String name;
  private int number;
  private Student student;
  
  //主鍵自動產生
  
  @Id(generate = GeneratorType.AUTO)
  
  public int getId()
  {
  return id;
  }
  
  public void setId(int id)
  {
  this.id = id;
  }
  
  public String getName()
  {
  return name;
  }
  public void setName(String name)
  {
  this.name = name;
  }
  
  public int getNumber()
  {
  return number;
  }
  
  public void setNumber(int number)
  {
  this.number = number;
  }
  
  @ManyToOne
  @JoinColumn(name = "student_id")
  
  public Student getStudent()
  {
  return student;
  }
  
  public void setStudent(Student student)
  {
  this.student = student;
  }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91视频-88av| 姬川优奈aav一区二区| 亚洲精品久久久久| 日韩av中文字幕在线免费观看| 亚洲经典中文字幕| 亚洲人成电影网| 精品国产一区二区三区久久久狼| 久久人人看视频| 欧美精品18videos性欧美| 日韩黄色高清视频| 美女少妇精品视频| 日韩欧美福利视频| 精品久久久久久电影| 欧美精品成人91久久久久久久| 欧美日韩激情美女| 性欧美视频videos6一9| 亚洲free嫩bbb| 色偷偷偷亚洲综合网另类| 国产精品丝袜视频| 欧美自拍视频在线观看| 国产精品偷伦视频免费观看国产| 成人在线视频福利| 欧美一区第一页| 最近2019中文字幕mv免费看| 亚洲高清不卡av| 精品国产一区二区三区久久狼5月| 国产精品美女www爽爽爽视频| 欧美亚洲国产日韩2020| 欧美精品第一页在线播放| 国产精品成熟老女人| 91国内精品久久| 国产精品日日做人人爱| 欧美大片在线免费观看| 国产99久久久欧美黑人| 中文字幕精品www乱入免费视频| 亚洲第一网站免费视频| 国内精品久久久| 中文字幕av一区中文字幕天堂| 亚洲免费av电影| 亚洲一区二区三区成人在线视频精品| 亚洲欧洲国产精品| 久久国产色av| 永久免费精品影视网站| 最近2019年好看中文字幕视频| 欧美亚洲视频在线看网址| 精品久久久久久久久久国产| 国产成人精品亚洲精品| 91深夜福利视频| 亚洲综合日韩在线| 亚洲精品成人网| 亚洲v日韩v综合v精品v| 中文字幕亚洲色图| 亚洲欧美日韩久久久久久| 日韩在线观看成人| 国产精品a久久久久久| 北条麻妃一区二区在线观看| 中文字幕精品一区二区精品| 日韩免费av一区二区| 久久免费视频网| 中文字幕视频一区二区在线有码| 清纯唯美亚洲激情| 亚洲国产精品成人精品| 97精品在线观看| 国产精品久久99久久| 日韩在线www| 美女视频黄免费的亚洲男人天堂| 亚洲精品国产电影| 亚洲人成网站777色婷婷| 欧美精品手机在线| 亚洲电影天堂av| 国产成人精品电影久久久| 欧美视频在线观看免费网址| 96精品久久久久中文字幕| 久久国产精品99国产精| 成人啪啪免费看| 懂色av中文一区二区三区天美| 欧美高清电影在线看| 久久影视电视剧凤归四时歌| 亚洲精品国产综合久久| 日韩精品高清在线观看| 国产精品va在线播放| 一区二区三区在线播放欧美| 亚洲最大福利网站| 日韩中文字在线| 亚洲人成欧美中文字幕| 国产综合在线观看视频| 久久久久久久999精品视频| 亚洲第一精品夜夜躁人人爽| 国产精品com| 欧美天天综合色影久久精品| 91久久久久久久久久久久久| 欧美另类99xxxxx| 日韩av成人在线观看| 亚洲黄在线观看| 欧美日韩黄色大片| 亚洲码在线观看| 欧美一级视频在线观看| 久久九九热免费视频| 精品一区二区三区电影| 久久久成人的性感天堂| 97婷婷涩涩精品一区| 韩国视频理论视频久久| 91av在线精品| 色偷偷av一区二区三区| 国产精品一区二区电影| 久久精品小视频| 国产精品日韩欧美综合| 欧洲成人午夜免费大片| 欧美大片在线免费观看| 亚洲福利视频专区| 91系列在线播放| 久久手机免费视频| 欧美精品在线视频观看| 亚洲精品98久久久久久中文字幕| 国产午夜精品全部视频在线播放| 亚洲国产三级网| 日本欧美中文字幕| 全球成人中文在线| 亚洲精品一二区| 欧美色另类天堂2015| 精品日本高清在线播放| 久久99热精品这里久久精品| 日韩av成人在线| 午夜免费日韩视频| 欧美激情亚洲视频| 国产精自产拍久久久久久蜜| 超薄丝袜一区二区| 久久久久久久激情视频| 狠狠色狠狠色综合日日小说| 欧美国产日韩中文字幕在线| 亚洲成色www8888| 亚洲成人黄色在线| 九九热最新视频//这里只有精品| 国产精品91在线| 国产精品一区二区性色av| 伊人久久大香线蕉av一区二区| 久久夜色精品亚洲噜噜国产mv| 午夜精品一区二区三区在线播放| 日韩av有码在线| 亚洲综合成人婷婷小说| 欧美日韩国产精品专区| 在线成人激情视频| 欧美成人免费观看| 欧美性高跟鞋xxxxhd| 91欧美激情另类亚洲| 狠狠躁夜夜躁久久躁别揉| 中文字幕欧美精品日韩中文字幕| 国产91色在线免费| 亚洲免费精彩视频| 色妞色视频一区二区三区四区| 日韩av电影在线播放| 欧美大秀在线观看| 美日韩精品免费观看视频| 国产91成人在在线播放| 亚洲欧美日韩天堂一区二区| 人人做人人澡人人爽欧美| 2019中文字幕在线免费观看| 91精品国产自产在线观看永久| 中文字幕欧美精品日韩中文字幕| 国产欧美日韩91| 亚洲人成电影在线观看天堂色| 91精品国产综合久久香蕉的用户体验| 国产欧美精品一区二区三区介绍| 97国产精品视频|