EJB系列(四)-- Entity Bean
2016-07-29 22:03
381 查看
上篇对EJB的会话Bean有了简单的了解,本篇为大家介绍一下实体Bean。
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文件
4、开发实体类
1)实体类必须要有默认无参构造器
2)实体类必须定义@Id
3)映射field还是property,由@Id的位置来决定
@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自动增长
Public class Company{
@Id
Privateint id;
PrivateString name;
}
@Entity
Public class Employee{
@Id
Privateint id;
PrivateString name;
@ManyToOne //在多的一端使用
@JoinColumn(name=”CID”) //定义关联字段名称
PrivateCompany company;
}
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;
}
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;
}
Public class Classes{
@Id
Private int id;
Private Stringname;
@OneToMany
PrivateSet<Student> students;
}
@Entity
Public class Student{
@Id
@GenerateValue
Private int id;
Private Stringname;
}
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;
}
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;
}
@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;
}
修改父类的策略即可:
@Inheritance(strategy=InheritanceType.JOINED)
修改父类的策略即可:
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
定义
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自动增长
关联映射
多对一关联映射
@EntityPublic class Company{
@Id
Privateint id;
PrivateString name;
}
@Entity
Public class Employee{
@Id
Privateint id;
PrivateString name;
@ManyToOne //在多的一端使用
@JoinColumn(name=”CID”) //定义关联字段名称
PrivateCompany company;
}
一对一关联映射
主键关联
@EntityPublic 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;
}
外键关联
@EntityPublic 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;
}
一对多关联映射
一对多单向关联映射
@EntityPublic class Classes{
@Id
Private int id;
Private Stringname;
@OneToMany
PrivateSet<Student> students;
}
@Entity
Public class Student{
@Id
@GenerateValue
Private int id;
Private Stringname;
}
一对多双向关联映射
@EntityPublic 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;
}
多对多关联映射
@EntityPublic 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)
相关文章推荐
- java EJB 加密与解密原理的一个例子
- 部署Java在服务器端的EJB组件的方法
- Java中BEAN与EJB的区别浅析
- 各种概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB
- EJB技术,够重!够杂!
- EJB
- JAVA BEAN 与 EJB 区别
- EJB调用 jndi获得session
- 中间件(EJB)学习路之一——步履维艰
- Spring+struts+ejb(一)
- 通过注解方式注入并使用其他EJB或者服务
- Remote Access
- Hibernate4之事务机制
- Before summer holiday
- 今天第一次写博客,欢迎各位IT大哥大姐们多多关照!!
- 在BEA WebLogic Server上开发应用程序的20条技巧
- 统一权限系统URight1.5
- Eclipse开发EJB3
- jsp编码规范
- J2EE的13种核心技术(二)