EJB系列(四)-- Entity Bean

蔚落 2022-09-24 11:24 202阅读 0赞

上篇对EJB的会话Bean有了简单的了解,本篇为大家介绍一下实体Bean。

定义

Entity Bean跟普通Java Bean无异,区别在于它们用ejb的Annotation进行了标记。实体Bean是管理持久化数据的一个对象,潜在使用一些相关的Java对象并且可以依靠主键被唯一识别。通过包括@Entity元注释来指定一个类是一个实体Bean。实体Bean表示来自数据库的持久化数据。

开发步骤

1、配置Jboss数据源

  1. 1)从目录JBOSS\_HOME\\docs\\examples\\jca下找到相应的数据库数据源配置的模版文件(如:如果是MySQL数据库就拷贝mysql-ds.xml
  2. 2)拷贝模版文件JBOSS\_HOME\\server\\default\\deploy目录下
  3. 3)修改其中的用户名、密码、数据库主机、数据库名称等等属性
  4. 4)拷贝数据库驱动到server\\default\\lib

2、创建EJB Project项目

3、完善META-INF目录下创建persistence.xml文件

  1. <?xml version="1.0"encoding="UTF-8"?>
  2. <persistence>
  3. <!--Name属性用于定义持久化内容的名称 -->
  4. <persistence-unitname="test">
  5. <!-- Jta-data-source 用于指定实体Bean使用的数据源名称 -->
  6. <jta-data-source>java:/MySqlDS</jta-data-source>
  7. <properties>
  8. <propertyname="hibernate.dialect"value="org.hibernate.dialect.MySQLDialect"/>
  9. <!--自动输出schema创建DDL语句 -->
  10. <propertyname="hibernate.hbm2ddl.auto" value="create"/>
  11. <!--"hibernate.hbm2ddl.auto"的值,若为上文中的"create-drop",则在实体Bean发布及卸载时将自动创建及删除相应的数据库表。为了使以后实体Bean的改动能反应到数据库表,建议使用update,这样实体Bean添加一个属性时能同时在数据库表增加相应字段。 -->
  12. </properties>
  13. </persistence-unit>
  14. </persistence>

4、开发实体类

  1. 1)实体类必须要有默认无参构造器
  2. 2)实体类必须定义@Id
  3. 3)映射field还是property,由@Id的位置来决定

注解使用

@Entity //用于类名前。表明他是pojo类

@Table(name=”t_person”) //用于类名。t_person表示这个类对应的表名,可以不用写。

@Column(name=”name”,length=255, nullable=false) //用于属性。name表示表中的字段名,若不写则字段名和属性名一样,length=255表示设置字段的长度,nullable=false表示非空

@Id //用于属性。表明表中的id,且要求一定要有ID

@Transient //瞬态属性,不会持久化到数据库;实体类默认是映射的;属性上加上@Transient,将不会映射

//主键生成策略

@GeneratedValue //用于id属性。指定需要框架自动产生主键

@GeneratedValue(generator=“hibernateuuidgenerator”):定义id的生成策略,定义生成器

@GenericGenerator(name=”hibernateuuidgenerator”,strategy=”uuid”)

@GenerateValue(strategy=GeneratonType.AUTO,generator=“generatorName”) //标识id自动增长

关联映射

多对一关联映射

@Entity

Public class Company{

  1. @Id
  2. Privateint id;
  3. PrivateString name;

}

@Entity

Public class Employee{

  1. @Id
  2. Privateint id;
  3. PrivateString name;
  4. **@ManyToOne //在多的一端使用**

@JoinColumn(name=”CID”) //定义关联字段名称

  1. PrivateCompany company;

}

一对一关联映射

主键关联

@Entity

Public class Customer{

  1. @Id
  2. Private int id;
  3. Private Stringname;
  4. @OneToOne
  5. **@PrimaryKeyJoinColumn**
  6. PrivateCustomerNo customerNo;

}

@Entity

Public class CustomerNo{

  1. @Id
  2. Private int id;
  3. Private Stringsn;
  4. @OneToOne(mappedBy=”customerNo”)
  5. Private Customercustomer;

}

外键关联

@Entity

Public class Customer{

  1. @Id
  2. Private int id;
  3. Private Stringname;
  4. @OneToOne
  5. **@JoinColumn(name=”customerIdNoId”,unique=true)**
  6. PrivateCustomerNo customerNo;

}

@Entity

Public class CustomerNo{

  1. @Id
  2. Private int id;
  3. Private Stringsn;
  4. @OneToOne(mappedBy=”customerNo”)
  5. Private Customercustomer;

}

一对多关联映射

一对多单向关联映射

@Entity

Public class Classes{

  1. @Id
  2. Private int id;
  3. Private Stringname;
  4. **@OneToMany**
  5. PrivateSet<Student> students;

}

@Entity

Public class Student{

  1. @Id
  2. @GenerateValue
  3. Private int id;
  4. Private Stringname;

}

一对多双向关联映射

@Entity

Public class Classes{

  1. @Id
  2. Private int id;
  3. Private Stringname;
  4. **@OneToMany(mappedBy=”classes”)**
  5. PrivateSet<Student> students;

}

@Entity

Public class Student{

  1. @Id
  2. @GenerateValue
  3. Private int id;
  4. Private Stringname;
  5. **@ManyToOne**

Private Classes classes;

}

多对多关联映射

@Entity

Public class Role{

  1. @Id
  2. Private int id;
  3. Private Stringname;
  4. @ManyToMany
  5. @JoinTable(name=”t\_role\_staff”)
  6. PrivateSet<Staff> staffs;

}

@Entity

Public class Staff{

  1. @Id
  2. Private int id;
  3. Private Stringname;
  4. @ManyToMany(mappedBy=”staffs”)
  5. PrivateSet<Role> roles;

}

继承映射

单表继承策略

@Entity

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name=”animalType”)

@DiscriminatorValue(“A”)

Public class Animal implements Serializable{

  1. @Id
  2. @GeneratedValue
  3. Private int id;
  4. Private Stringname;
  5. Private Stringsex;

}

@Entity

@DiscriminatorValue(“B”)

Public class Bird extends Animal{

  1. Private intheight;

}

@Entity

@DiscriminatorValue(“P”)

Public class Pig extends Animal{

  1. Private intweight;

}

Join映射策略

Joined策略:父类和子类都对应不同的表,子类中只存在其扩展的特殊的属性(不包括父类的属性)

修改父类的策略即可:

@Inheritance(strategy=InheritanceType.JOINED)

Table_Per_Class映射策略

  1. 父类和子类都对应不同的表,子类中存在的所有属性(包括从父类继承下来的所有属性)

修改父类的策略即可:

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

发表评论

表情:
评论列表 (有 0 条评论,202人围观)

还没有评论,来说两句吧...

相关阅读