您的位置:首页 > 其它

EJB系列(四)-- Entity Bean

2016-07-29 22:03 381 查看
   上篇对EJB的会话Bean有了简单的了解,本篇为大家介绍一下实体Bean。

定义

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

开发步骤

1、配置Jboss数据源

    1)从目录JBOSS_HOME\docs\examples\jca下找到相应的数据库数据源配置的模版文件(如:如果是MySQL数据库就拷贝mysql-ds.xml)

    2)拷贝模版文件JBOSS_HOME\server\default\deploy目录下

    3)修改其中的用户名、密码、数据库主机、数据库名称等等属性

    4)拷贝数据库驱动到server\default\lib下

2、创建EJB Project项目

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

<?xml version="1.0"encoding="UTF-8"?>

<persistence>

<!--Name属性用于定义持久化内容的名称  -->

<persistence-unitname="test">

<!-- Jta-data-source 用于指定实体Bean使用的数据源名称 -->

<jta-data-source>java:/MySqlDS</jta-data-source>

<properties>

<propertyname="hibernate.dialect"value="org.hibernate.dialect.MySQLDialect"/>

<!--自动输出schema创建DDL语句 -->

<propertyname="hibernate.hbm2ddl.auto" value="create"/>

<!--"hibernate.hbm2ddl.auto"的值,若为上文中的"create-drop",则在实体Bean发布及卸载时将自动创建及删除相应的数据库表。为了使以后实体Bean的改动能反应到数据库表,建议使用update,这样实体Bean添加一个属性时能同时在数据库表增加相应字段。  -->

</properties>

</persistence-unit>

</persistence>

4、开发实体类

     1)实体类必须要有默认无参构造器

     2)实体类必须定义@Id

     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{

         @Id

         Privateint id;

         PrivateString name;

}

@Entity

Public class Employee{

         @Id

         Privateint id;

         PrivateString name;

         @ManyToOne          //在多的一端使用

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

         PrivateCompany company;

}

一对一关联映射

主键关联

@Entity

Public class Customer{

       @Id

       Private int id;

       Private Stringname;

       @OneToOne

       @PrimaryKeyJoinColumn

       PrivateCustomerNo customerNo;

}

 

@Entity

Public class CustomerNo{

       @Id

       Private int id;

       Private Stringsn;

       @OneToOne(mappedBy=”customerNo”)

       Private Customercustomer;

}

 

外键关联

@Entity

Public class Customer{

       @Id

       Private int id;

       Private Stringname;

       @OneToOne

       @JoinColumn(name=”customerIdNoId”,unique=true)

       PrivateCustomerNo customerNo;

}

 

@Entity

Public class CustomerNo{

       @Id

       Private int id;

       Private Stringsn;

       @OneToOne(mappedBy=”customerNo”)

       Private Customercustomer;

}

一对多关联映射

一对多单向关联映射

@Entity

Public class Classes{

       @Id

       Private int id;

       Private Stringname;

 

       @OneToMany

       PrivateSet<Student> students;

}

 

@Entity

Public class Student{

       @Id

       @GenerateValue

       Private int id;

       Private Stringname;

}

 

一对多双向关联映射

@Entity

Public class Classes{

       @Id

       Private int id;

       Private Stringname;

 

       @OneToMany(mappedBy=”classes”)

       PrivateSet<Student> students;

}

 

@Entity

Public class Student{

       @Id

       @GenerateValue

       Private int id;

       Private Stringname;

 

       @ManyToOne

     
Private Classes classes;


}

 

多对多关联映射

@Entity

Public class Role{

       @Id

       Private int id;

       Private Stringname;

 

       @ManyToMany

       @JoinTable(name=”t_role_staff”)

       PrivateSet<Staff> staffs;

}

 

@Entity

Public class Staff{

       @Id

       Private int id;

       Private Stringname;

 

       @ManyToMany(mappedBy=”staffs”)

       PrivateSet<Role> roles;

}

 

继承映射

单表继承策略

@Entity

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name=”animalType”)

@DiscriminatorValue(“A”)

Public class Animal implements Serializable{

       @Id

       @GeneratedValue

       Private int id;

       Private Stringname;

       Private Stringsex;

}

 

@Entity

@DiscriminatorValue(“B”)

Public class Bird extends Animal{

       Private intheight;

}

 

@Entity

@DiscriminatorValue(“P”)

Public class Pig extends Animal{

       Private intweight;

}

 

Join映射策略

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

修改父类的策略即可:
@Inheritance(strategy=InheritanceType.JOINED)

Table_Per_Class映射策略

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

修改父类的策略即可:
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ejb