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

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

EJB 3.0開發指南之依賴值對象

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

  在上面的章節我們提到,實體bean的屬性可以是java基本對象、Date等,事實上,實體Bean的屬性也可以是其他的java對象。這些Java對象不能直接從持久化上下文中讀取,它依靠于主實體bean。不象關聯實體Bean,在EJB3.0中不支持依靠值對象的集合。
  
  依靠值對象不支持繼續,這將在EJB3.1中在討論。
  
  依靠類需要使用◎DependentObject來注釋:
  
  @Target({TYPE}) @Retention(RUNTIME)
  public @interface DependentObject {
  accessType access() default PROPERTY;
  }
  
  這個注釋可以指定容器訪問這個類的方法,是通過屬性還是直接通過字段來訪問。
  
  在實體Bean的一個屬性需要使用依靠值對象,那么這個屬性的get方法需要使用@Dependent注釋:
  
  @Target({METHOD, FIELD}) @Retention(RUNTIME)
  public @interface Dependent {
  DependentAttribute[] value() default {};
  }
  
  這個注釋可以指定依靠的屬性DependentAttribute:
  
  @Target({}) @Retention(RUNTIME)
  
  public @interface DependentAttribute {
  String name();
  Column[] column() default {};
  }
  
  可以指定屬性名稱和映射的列名。這里,一個主實體Bean的屬性可以映射到數據表中的多列。
  
  假如你還不太明白,看下面的例子。
  
  這個例子主要有以下幾個文件,這個例子主要實現了治理學生的功能。Student是一個實體Bean,這個Bean的name屬性是一個類,也就是Name類,這個Name類就是一個依靠值對象。StudentDAOBean是一個無狀態的會話Bean,用來調用實體Bean。和前面的例子一樣,我們還是使用Client測試。
  
  Student.java:實體Bean。
  
  Name.java:實體Bean所依靠的類。
  
  StudentDAO.java:會話Bean的業務接口
  
  StudentDAOBean.java:會話Bean的實現類
  
  Client.java:測試EJB的客戶端類。
  
  jndi.properties:jndi屬性文件,提供訪問jdni的基本配置屬性。
  
  Build.xml:ant 配置文件,用以編譯、發布、測試、清除EJB。
  
  下面針對每個文件的內容做一個介紹。
  
  Student.java
  
  package com.kuaff.ejb3.dependent;
  
  import javax.ejb.Dependent;
  import javax.ejb.DependentAttribute;
  import javax.ejb.Column;
  import javax.ejb.Entity;
  import javax.ejb.GeneratorType;
  import javax.ejb.Id;
  import javax.ejb.Table;
  
  @Entity @Table(name = "STUDENT") public class Student implements java.io.Serializable
  {
  private int id;
  private Name name;
  private String grade;
  private String email;
  
  @Id(generate = GeneratorType.AUTO)
  
  public int getId()
  {
  return id;
  }
  
  public void setId(int id)
  {
  this.id = id;
  }
  
  public void setName(Name name)
  {
  this.name = name;
  }
  
  @Dependent(
  { @DependentAttribute(name = "first", column ={ @Column(name = "FIRST") }),
  @DependentAttribute(name = "last", column ={ @Column(name = "LAST") }) })
  public Name getName()
  {
  return name;
  }
  
  public void setGrade(String grade)
  {
  this.grade = grade;
  }
  
  @Column(name = "GRADE")
  
  public String getGrade()
  {
  return grade;
  }
  
  public void setEmail(String email)
  {
  this.email = email;
  }
  
  @Column(name = "EMAIL")
  
  public String getEmail()
  {
  return email;
  }
  }
  
  Student.java實現了Student實體Bean,它提供學生的基本情況。學生的姓名是Name類,通過@Dependent(
  
  { @DependentAttribute(name = "first", column ={ @Column(name = "FIRST") }),
  
  @DependentAttribute(name = "last", column ={ @Column(name = "LAST") }) })
  
  來聲明,并指定這個依靠類的兩個屬性first和last,并映射到數據表的FIRST和LAST列上。
  
  Name.java
  
  package com.kuaff.ejb3.dependent;
  
  import java.io.Serializable;
  import javax.ejb.AccessType;
  import javax.ejb.DependentObject;
  
  @DependentObject(access = AccessType.PROPERTY)
  
  public class Name implements java.io.Serializable
  {
  private String first;
  private String last;
  
  public Name()
  {}
  
  public Name(String first, String last)
  {
  this.first = first;
  this.last = last;
  }
  
  public String getFirst()
  {
  return first;
  }
  
  public void setFirst(String first)
  {
  this.first = first;
  }
  
  public String getLast()
  {
  return last;
  }
  
  public void setLast(String last)
  {
  this.last = last;
  }
  }
  
  這個值對象也很簡單,和一般的javaBean差不多,但有兩個地方需要注重:
  
  1. 這個類實現了java.io.Serializable接口
  
  2. 這個類使用@DependentObject做了注釋
  
  StudentDAO.java
  
  package com.kuaff.ejb3.dependent;
  
  import javax.ejb.Remote;
  import java.util.List;
  
  @Remote
  
  public interface StudentDAO
  {
  int create(String first, String last, String grade, String email);
  Student find(int id);
  List findByFirstName(String name);
  List findByLastName(String name);
  List findByEmail(String email);
  
  void merge(Student s);
  }
  
  這個會話Bean接口提供查找用戶的方法。
  
  StudentDAOBean.java
  
  package com.kuaff.ejb3.dependent;
  
  import java.util.List;
  import javax.ejb.EntityManager;
  import javax.ejb.Inject;
  import javax.ejb.Stateless;
  
  @Stateless
  
  public class StudentDAOBean implements StudentDAO
  {
  @Inject
  private EntityManager manager;
  
  public int create(String first, String last, String grade, String email)
  {
  Student student = new Student();
  student.setName(new Name(first,last));
  student.setGrade(grade);
  student.setEmail(email);
  manager.create(student);
  return student.getId();
  }
  
  public Student find(int id)
  {
  return manager.find(Student.class, id);
  }
  
  public List findByFirstName(String name)
  {
  return manager.createQuery("from Student s where s.name.last = :name").setParameter("name", name).listResults();
  }
  public List findByLastName(String name)
  {
  return manager.createQuery("from Student s where s.name.first = :name").setParameter("name", name).listResults();
  }
  
  public List findByEmail(String email)
  {
  return manager.createQuery("from Student s where s.email = :email").setParameter("email", email).listResults();
  }
  
  public void merge(Student s)
  {
  manager.merge(s);
  }
  
  }
  
  這個是會話Bean的實現類??梢钥吹礁鶕祵ο蟮膶傩圆檎抑鲗嶓wBean。
  
  Client.java
  
  package com.kuaff.ejb3.dependent;
  
  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  import java.util.List;
  
  public class Client
  {
  public static void main(String[] args) throws NamingException
  {
  InitialContext ctx = new InitialContext();
  StudentDAO dao = (StudentDAO) ctx.lookup(StudentDAO.class.getName());
  int id = dao.create("晁","岳攀","8","smallnest@kuaff.com");
  dao.create("朱","立煥","6","zhuzhu@kuaff.com");
  List list = dao.findByEmail("zhuzhu@kuaff.com");
  for(Object o:list)
  {
  Student s = (Student)o;
  System.out.printf("%s %s的email:%s%n",s.getName().getFirst(),s.getName().getLast(),s.getEmail());
  }
  }
  }
  
  這個客戶端增加學生的分數,并且測試顯示這個學生的email。
  
  請運行{$JBOSS_HOME}/bin目錄下的run.bat: run –c all

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91伊人影院在线播放| 亚洲成色777777女色窝| 日韩精品在线电影| 91国内揄拍国内精品对白| 日韩免费看的电影电视剧大全| 欧美大成色www永久网站婷| 日韩高清免费观看| 欧美精品亚州精品| 欧美日韩亚洲天堂| 成人激情春色网| 日韩在线视频免费观看| 91九色国产在线| 国产日韩欧美中文| 亚洲性生活视频在线观看| 欧美电影免费观看高清完整| 国产精品扒开腿爽爽爽视频| 久久精品亚洲精品| 国产精品成人aaaaa网站| xxxxx成人.com| 久久精品视频在线| 久久亚洲综合国产精品99麻豆精品福利| 亚洲欧美激情四射在线日| 自拍亚洲一区欧美另类| 国产精品高潮视频| 日韩欧亚中文在线| 久久精品视频网站| 日韩av手机在线观看| 国产丝袜一区二区三区免费视频| 2019精品视频| 亚洲成年人影院在线| 亚洲欧美制服另类日韩| 精品偷拍各种wc美女嘘嘘| 欧美一区二区三区……| 亚州欧美日韩中文视频| 91精品国产自产91精品| 精品日本美女福利在线观看| 久久久久久久久久久久av| 欧洲中文字幕国产精品| 久久黄色av网站| 亚洲丁香婷深爱综合| 国产精品第一第二| 亚洲老头同性xxxxx| 国产一区二区精品丝袜| 国产成人午夜视频网址| 精品女厕一区二区三区| 国产伊人精品在线| 国产一区二区三区精品久久久| 国产亚洲视频在线观看| 69视频在线免费观看| 国产91精品久| 亚洲精品一二区| 日韩一区在线视频| 久久精品在线播放| 欧美电影免费看| 亚洲第一精品电影| 欧美大肥婆大肥bbbbb| 国产丝袜一区二区三区免费视频| 国产成人在线视频| 这里只有视频精品| 在线播放日韩av| 久久成人综合视频| 国产精品老女人精品视频| 国产精品久久久久久亚洲影视| 欧美激情小视频| 欧美成人国产va精品日本一级| 欧洲s码亚洲m码精品一区| 欧美xxxx18性欧美| 在线免费看av不卡| 在线播放国产一区中文字幕剧情欧美| 欧美日在线观看| 97视频在线播放| 狠狠久久亚洲欧美专区| 精品久久久久久电影| 欧美中文在线观看| 欧美成人午夜激情| 国产免费久久av| 日韩av在线免费观看| 欧美日韩一区二区精品| 91久久久国产精品| 国产精品久久久久久久7电影| 国产亚洲精品久久久优势| 欧美猛少妇色xxxxx| 国产精品久久久久久久一区探花| 高清一区二区三区日本久| 亚洲韩国日本中文字幕| 亚洲精品一区在线观看香蕉| 亚洲国产精品免费| 久久久亚洲影院你懂的| 日韩黄色av网站| 136fldh精品导航福利| 亚洲女人天堂视频| 国产精品99蜜臀久久不卡二区| 日本欧美一级片| 久久成人精品一区二区三区| 欧美午夜视频在线观看| 久久91超碰青草是什么| 国产成人精品免高潮费视频| 国产福利视频一区二区| 欧美中文在线视频| 精品国内自产拍在线观看| 夜夜嗨av色综合久久久综合网| 日韩精品日韩在线观看| 久久亚洲精品小早川怜子66| 国产精品露脸自拍| 在线视频欧美性高潮| 欧美专区在线视频| 欧美日韩精品在线播放| 欧美黄色片在线观看| 动漫精品一区二区| 亚洲色图50p| 日韩中文在线视频| 国产亚洲精品综合一区91| 一本一本久久a久久精品综合小说| 久久综合伊人77777蜜臀| 欧美成人网在线| 日韩av电影免费观看高清| 久久久久久香蕉网| 国产福利视频一区二区| 欧美国产欧美亚洲国产日韩mv天天看完整| 一区二区三区 在线观看视| 亚洲一区二区久久久| 欧美高清不卡在线| 亚洲精品免费网站| 日韩电影中文字幕在线观看| 亚洲人成网站色ww在线| 精品日本高清在线播放| 9.1国产丝袜在线观看| 欧美日韩国产限制| 国产精品久久久久久久久久小说| 欧美性生交xxxxxdddd| 欧美精品生活片| 欧美日韩中文在线| 日韩在线视频观看正片免费网站| 久久99久国产精品黄毛片入口| 欧美大片在线看免费观看| 欧美精品videos另类日本| 中文字幕亚洲激情| 欧美激情视频在线免费观看 欧美视频免费一| 欧美人交a欧美精品| 亚洲自拍欧美另类| 日本一区二区在线免费播放| 精品欧美aⅴ在线网站| 成人免费在线网址| 久久久综合免费视频| 色婷婷av一区二区三区久久| 中文字幕日韩高清| 久久精品小视频| 日韩在线观看网站| 国产精品一区二区三| 亚洲欧美一区二区三区久久| 亚洲精品国产精品国自产观看浪潮| 国产精品国产三级国产aⅴ9色| 日韩福利伦理影院免费| 97视频免费观看| 亚洲精品久久7777777| 欧美精品在线极品| 亚洲男人第一av网站| 欧美区二区三区| 久久影视三级福利片| 97久久精品在线| 国产精品久久久久久av福利软件| 久久久久久亚洲精品中文字幕| 51午夜精品视频| 成人妇女免费播放久久久|