EJB3.0开发之多对多和一对一

2016-01-29 13:00 12 1 收藏

EJB3.0开发之多对多和一对一,EJB3.0开发之多对多和一对一

【 tulaoshi.com - Java 】

  在前面的例子中,我们演示了一对多和多对一的例子,在本章将演示多对多和一对一的关系。

  学生和老师就是多对多的关系。一个学生有多个老师,一个老师教多个学生。

  学生和档案就是一对一的关系(不知道国外的学生有没有档案?)。

  为了实现多对多的关系,数据库中需要关联表,用以在两个实体间建立关联。JBoss可以自动生成关联表,你也可以@AssociationTable来指定关联表的信息。

  如:

  @ManyToMany(cascade = {CascadeType.CREATE, CascadeType.MERGE}, fetch = FetchType.EAGER, isInverse = true)
  @AssociationTable(table = @Table(name = "STUDENT_TEACHER"),

  joinColumns = {@JoinColumn(name = "TEACHER_ID")},inverseJoinColumns = {@JoinColumn(name = "STUDENT_ID")})

  @ AssociationTable的注释声明如下:
  @Target({METHOD, FIELD})

  public @interface AssociationTable {
  Table table() default @Table(specified=false);
  JoinColumn[] joinColumns() default {};
  JoinColumn[] inverseJoinColumns() default {};
  }

  关联表注释指定了关联表的名称、主表的列和从表的列。

  为了实现一对一的关系,需要用@OneToOne来注释。

  如:

  @OneToOne(cascade = {CascadeType.ALL})
  @JoinColumn(name = "DOSSIER_ID")

  public Dossier getDossier()
  {
  return dossier;
  }

  这定义了一个单向的一对一的关系。如果在Dossier也定义了相关的关联,那么它就是双向的。双向的意思就是通过一个Student实体就可以查找到一个Dossier,通过一个Dossier就可以查找到一个Student。

  @ OneToOne的注释声明如下:
  @Target({METHOD, FIELD}) @Retention(RUNTIME)

  public @interface OneToOne {
  String targetEntity() default "";
  CascadeType[] cascade() default {};
  FetchType fetch() default EAGER;
  boolean optional() default true;
  }

  这个例子主要有以下几个文件,这个例子主要实现了学生和老师、学生和档案之间的关系。Student、Teacher、Dossier都是实体Bean。Student和Dossier是一个双向的OneToOne之间的关系,Student和Teacher是ManyToMany的关系,也是双向的。和前面的例子一样,我们还是使用Client测试。

  Student.java:实体Bean。

  Dossier.java:实体Bean所依赖的类。

  Teacher.java:实体Bean所依赖的类。

  EntityTest.java:会话Bean的业务接口

  EntityTest Bean.java:会话Bean的实现类

  Client.java:测试EJB的客户端类。

  jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。

  Build.xml:ant 配置文件,用以编译、发布、测试、清除EJB。

  下面针对每个文件的内容做一个介绍。

  Student.java

  package com.kuaff.ejb3.relationships;
  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.OneToOne;
  import javax.ejb.ManyToMany;
  import javax.ejb.Table;
  import javax.ejb.AssociationTable;
  import java.util.ArrayList;
  import java.util.Set;
  import java.util.Collection;
  import java.io.Serializable;

  @Entity

  @Table(name = "STUDENT")

  public class Student implements Serializable

  {
  private int id;
  private String first;
  private String last;
  private Dossier dossier;
  private Set teachers;

  @Id(generate = GeneratorType.AUTO)

  public int getId()
  {
  return id;
  }

  public void setId(int id)
  {
  this.id = id;
  }

  public void setFirst(String first)
  {
  this.first = first;
  }

  public String getFirst()
  {
  return first;
  }

  public void setLast(String last)
  {
  this.last = last;
  }

  public String getLast()
  {
  return last;
  }

  public void setDossier(Dossier dossier)

来源:https://www.tulaoshi.com/n/20160129/1488472.html

延伸阅读
标签: Java JAVA基础
在EJB3.0中,实体Bean可以实现继承关系。 比如有个Person的实体bean,它有姓名和性别两个属性。 上帝和女娲造人的时候,造出两种人:Man和Woman。Man和Woman都是实体Bean,而且他们都继承Person。 单一表策略就是副实体和子实体的数据都存放在一张表中,同时指定一列用来区别这些实体。 如: @Entity ...
标签: 创意手工
这是一款非常可爱的家居饰品,这是一个由由法国艺术家Chloe Fleury设计的墙壁挂件,只需几个的折叠和一点点的胶水,就可以创造出一个可爱的立体兔子头像。设计师特别有心地设计了情侣套装,也许是一个不错的情人节礼物。
标签: 电脑入门
翩翩公子煮酒弄青梅, | 悠悠戏谑何管红妆泪。 俄愿许尓三世温柔 |▍ | 愿尓许俄三世温柔 |▍ 舍不得你了嗎|忘不了你了嗎 在乎你的不在乎丶 | 心疼你的不心疼。 选择去嫒ら泥 | 学会去僾ら泥 不可剪切的灬爱 | 不可复制的灬情 男人、一样要自爱。 | 女人、一样要自尊。 -梦回千百遍|-心碎千百回 街頭唱啨歌。 | 街角寫啨书。 亲耐德、...
标签: 电脑入门
把所有回憶抹平 如果還有傷疤 讓時間來麻痹。 所有的事 只能用哎- 来形容。 親愛的,我愛妳比妳愛我多的多 ! り总之还是应该感谢你们这些人们;- 白首卜相離,妳是否能做到?↘ _ _ ______---- 某段记忆突兀得被抽离.' 指尖还残留着你的余温。 ヽ 从未___________改 变 的 事、 总 是 那 么 纠 结。 这么的伤害我 你快乐么丶 不 ...