`
ranyut
  • 浏览: 259881 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

EJB3实体映射之ManyToMany

    博客分类:
  • EJB3
阅读更多
Student 类:

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Student implements Serializable{
	private static final long serialVersionUID = 4283862967633995348L;
	private Integer studentid;
    private String studentName;    
    private Set<Teacher> teachers = new HashSet<Teacher>();
  
    public Student() {}
    
    public Student(String studentName) {
        this.studentName = studentName;
    }
    
    @Id
    @GeneratedValue
    public Integer getStudentid() {
        return studentid;
    }
    public void setStudentid(Integer studentid) {
        this.studentid = studentid;
    }
    
    @Column(nullable=false, length=32)
	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	
	// Student类中有一个Teacher集合 对应Teacher类中students属性
    @ManyToMany(mappedBy = "students") 
    public Set<Teacher> getTeachers() {
        return teachers;
    }
    public void setTeachers(Set<Teacher> teachers) {
        this.teachers = teachers;
    }

    /**
     * 返回对象的散列代码值。该实现根据此对象
     * 中 studentid 字段计算散列代码值。
     * @return 此对象的散列代码值。
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (this.studentid != null ? this.studentid.hashCode() : super.hashCode());
        return hash;
    }

    /**
     * 确定其他对象是否等于此 Student。当且仅当
     * 参数不为 null 且该参数是具有与此对象相同 studentid 字段值的 Student 对象时,
     * 结果才为 <code>true</code>。
     * @param 对象,要比较的引用对象
     * 如果此对象与参数相同,则 @return <code>true</code>;
     * 否则为 <code>false</code>。
     */
    @Override
    public boolean equals(Object object) {
        if (!(object instanceof Student)) {
            return false;
        }
        Student other = (Student)object;
        if (this.studentid != other.studentid && (this.studentid == null || !this.studentid.equals(other.studentid))) return false;
        return true;
    }

    /**
     * 返回对象的字符串表示法。该实现根据 studentid 字段
     * 构造此表示法。
     * @return 对象的字符串表示法。
     */
    @Override
    public String toString() {
        return this.getClass().getName()+ "[studentid=" + studentid + "]";
    } 
}



Teacher 类:

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
public class Teacher implements Serializable{
	private static final long serialVersionUID = 3248995998128746336L;
	private Integer teacherid;
    private String teacherName;    
    private Set<Student> students = new HashSet<Student>();
  
    public Teacher() {}
    
	public Teacher(String teacherName) {
        this.teacherName = teacherName;
    }
    
    @Id
    @GeneratedValue
    public Integer getTeacherid() {
        return teacherid;
    }
    public void setTeacherid(Integer teacherid) {
        this.teacherid = teacherid;
    } 
    
    @Column(nullable=false, length=32)
    public String getTeacherName() {
		return teacherName;
	}

	public void setTeacherName(String teacherName) {
		this.teacherName = teacherName;
	}
    
	// ①Teacher中有一个Student集合
	// ②用一张“Teacher_Student”表存两者的关系 
	// ③joinColumns 对应本类中的外键列 inverseJoinColumns对应另一方的外键列
	// ④many 一方延迟加载
    @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.REFRESH}, fetch = FetchType.LAZY) 
    @JoinTable(name = "Teacher_Student",
        joinColumns = {@JoinColumn(name = "Teacher_ID")},
        inverseJoinColumns = {@JoinColumn(name = "Student_ID")})
    public Set<Student> getStudents() {
        return students;
    }
    public void setStudents(Set<Student> students) {
        this.students = students;
    }
    
    public void addStudent(Student student) {
        if (!this.students.contains(student)) {
             this.students.add(student);
        }
    }

     public void removeStudent(Student student) {
         if (this.students.contains(student)) {
        	 this.students.remove(student);
        }
    } 
     
     /**
      * 返回对象的散列代码值。该实现根据此对象
      * 中 teacherid 字段计算散列代码值。
      * @return 此对象的散列代码值。
      */
     @Override
     public int hashCode() {
         int hash = 0;
         hash += (this.teacherid != null ? this.teacherid.hashCode() : 0);
         return hash;
     }

     /**
      * 确定其他对象是否等于此 Teacher。当且仅当
      * 参数不为 null 且该参数是具有与此对象相同 teacherid 字段值的 Teacher 对象时,
      * 结果才为 <code>true</code>。
      * @param 对象,要比较的引用对象
      * 如果此对象与参数相同,则 @return <code>true</code>;
      * 否则为 <code>false</code>。
      */
     @Override
     public boolean equals(Object object) {
         if (!(object instanceof Teacher)) {
             return false;
         }
         Teacher other = (Teacher)object;
         if (this.teacherid != other.teacherid && (this.teacherid == null || !this.teacherid.equals(other.teacherid))) return false;
         return true;
     }

     /**
      * 返回对象的字符串表示法。该实现根据 teacherid 字段
      * 构造此表示法。
      * @return 对象的字符串表示法。
      */
     @Override
     public String toString() {
         return this.getClass().getName()+ "[teacherid=" + teacherid + "]";
     } 
}
分享到:
评论

相关推荐

    EJB3开发Entity

    EJB3支持一对多(@OneToMany)、多对一(@ManyToOne)、一对一(@OneToOne)和多对多(@ManyToMany)的关系映射,通过注解来定义实体之间的关联。 9. **懒加载和即时加载** EJB3支持懒加载和即时加载策略,控制...

    JPA学习笔记-EJB-04JPA关联映射总结

    3. `@ManyToOne`:多对一关系,多个实体对应另一个实体的单一实例。 4. `@ManyToMany`:多对多关系,多个实体可以关联多个其他实体,通常需要一个中间表来存储关系。 在实际应用中,JPA的关联映射不仅可以简化对象...

    Jboss下开发ejb应用之一实体bean的应用

    首先,理解EJB实体Bean的含义至关重要。实体Bean代表持久化的业务对象,它们与数据库中的记录相对应,负责存储和检索数据。EJB 3.0引入了注解驱动的开发方式,大大简化了实体Bean的编程模型,使得开发者不再需要编写...

    EJB3 PPT教程

    同时,EJB3还支持类的继承映射,使得复杂的对象结构能够有效地映射到数据库中。 **五、持久化实体管理器(EntityManager)** EntityManager是JPA的主要接口,用于操作实体对象,包括查询、保存、更新和删除。通过`@...

    EJB3多对多关系映射实例

    本实例将聚焦于EJB3中的多对多关系映射,这是数据库设计中常见的关系类型,常用于描述两个实体之间复杂的关系,如用户与角色、商品与类别等。 在Java世界中,我们通常使用JPA(Java Persistence API)和其实现如...

    JPA 批注参考 EJB3.0实体Bean注解详细解析

    15. **@SecondaryTable** - 用于指定一个实体映射到多个表时,除了主表之外的辅助表。 #### 三、配置实体的示例 - 使用 `@Entity` 和 `@Table` 批注定义实体和数据库表的映射关系。 - 使用 `@Id` 和 `@...

    EJB3_study

    EJB3引入了注解驱动的实体管理,使得无需编写大量的接口和实现代码,可以通过`@Entity`定义实体类,`@Table`指定映射的数据库表,`@Id`标记主键字段。 - **会话Bean(Session Bean)**:提供业务逻辑服务,可以是...

    EJB相关jar包(有persistence)

    总结来说,"EJB相关jar包(有persistence)"提供的`ejb3-persistence.jar`是一个关键的库,它包含了EJB3中JPA的实现,让开发者能够方便地进行对象-关系映射,简化了数据库操作,提升了企业级应用的开发效率。...

    EJB3使用说明中文版

    ### EJB3 使用说明中文版知识点总结 #### 一、EJB3 概念与应用场景 **企业 Java Beans (EJB)** 是一种基于 Java 的中间件技术,它为开发复杂的企业级应用程序提供了一种标准化的方法。EJB3 相比于早期版本有了很大...

    EJB3.0规范-EJB3.0 SPECIFICATION

    9. **实体关系图(ERD)**:EJB3.0规范支持通过注解定义复杂的关系,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)等。 10. **异步处理(Asynchronous Processing)*...

    EJB.rar_EJB3_EJB3.0_ejb

    通过`@Entity`注解定义实体类,`@Table`指定映射的数据库表,`@Id`定义主键,可以轻松实现对象关系映射。同时,`@GeneratedValue`用于自动生成主键,`@OneToMany`、`@ManyToOne`、`@ManyToMany`和`@OneToOne`用于...

    EJB3_JPA文档

    JPA通过注解来描述实体间的关联关系,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系。此外,还支持延迟加载(Lazy Loading)和即时加载(Eager Loading)策略。 ...

    EJB3.0实例教程服务器为JBOSS

    3. **测试**: 在 JBoss 控制台中确认 EJB 是否已成功部署,并通过简单的客户端程序进行功能验证。 ##### 2.3 在独立的 Tomcat 中调用 EJB 1. **配置 JNDI**: 在 Tomcat 中设置 JNDI 属性,使其能够访问远程 JBoss ...

    Ejb规范.zip

    - **关系映射**:JPA提供了多种方式来处理关系数据库中的关联,如`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`。 - **查询语言**:JPA引入了JPQL(Java Persistence Query Language),类似于SQL,...

    EJB3.0_jBuilder_StepByStep.rar_2007

    7. **实体关系映射**:在教程中,你将学习如何使用JBuilder 2007配置实体Bean之间的关系,如一对一、一对多、多对多关系,并使用`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`等注解。 8. **事务管理**...

    浪曦_EJB3.0实例教程_多对多映射

    综上所述,EJB 3.0的多对多映射提供了灵活且易于配置的方式处理复杂的实体关系,使得Java EE开发者能够更加专注于业务逻辑,而不是底层的数据库操作。在实际开发中,应结合具体需求,合理设计和优化多对多映射,以...

    ejb-3_0-fr-spec-ejbcore.pdf,ejb-3_0-fr-spec-persistence.pdf,ejb-3_0-fr-spec-simplified.pdf

    - 映射概念:如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)的关系映射。 - 查询语言:Java Persistence Query Language(JPQL),类似于SQL,但操作的是对象而不是表。 ...

    ejb3-persistence-api-1.0&1.0.2源码

    3. **实体关系(Entity Relationships)**: JPA支持多种关系映射,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。这些关系可以通过`@JoinColumn`和`@JoinTable`等...

    JPA学习源码(EJB实体Bean)

    **JPA学习源码(EJB实体Bean)** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化对象。它简化了在关系数据库中存储和检索Java对象的过程,是JAVA EE5中引入的重要组件。JPA通过提供ORM(对象...

Global site tag (gtag.js) - Google Analytics