EJB---->实体Bean(Entity Bean) 持久化 和 persistence.xml 配置文件
持久化是位于JDBC 之上的一个更高层抽象。持久层将对象映射到数据库,以便在查询、装载、更新,或删除对
象的时候,无须使用像JDBC 那样繁琐的API。在EJB 的早期版本中,持久化是EJB 平台的一部分。从EJB 3.0
开始,持久化已经自成规范,被称为Java Persistence API。
象的时候,无须使用像JDBC 那样繁琐的API。在EJB 的早期版本中,持久化是EJB 平台的一部分。从EJB 3.0
开始,持久化已经自成规范,被称为Java Persistence API。
Java Persistence API 定义了一种方法,可以将常规的普通Java 对象(有时被称作POJO)映射到数据库。这些普
通Java 对象被称作entity bean。除了是用Java Persistence 元数据将其映射到数据库外,entity bean 与其他Java 类
没有任何区别。事实上,创建一个Entity Bean 对象相当于新建一条记录,删除一个Entity Bean 会同时从数据库
中删除对应记录,修改一个Entity Bean 时,容器会自动将Entity Bean 的状态和数据库同步。
通Java 对象被称作entity bean。除了是用Java Persistence 元数据将其映射到数据库外,entity bean 与其他Java 类
没有任何区别。事实上,创建一个Entity Bean 对象相当于新建一条记录,删除一个Entity Bean 会同时从数据库
中删除对应记录,修改一个Entity Bean 时,容器会自动将Entity Bean 的状态和数据库同步。
Java Persistence API 还定义了一种查询语言(JPQL),具有与SQL 相类似的特征,只不过做了裁减,以便处理Java对象而非原始的关系schema。
持久化persistence.xml 配置文件
一个实体Bean 应用由实体类和persistence.xml 文件组成。persistence.xml 文件在Jar 文件的META-INF 目录。
persistence.xml 文件指定实体Bean 使用的数据源及EntityManager 对象的默认行为。persistence.xml 文件的配置说
明如下:
一个实体Bean 应用由实体类和persistence.xml 文件组成。persistence.xml 文件在Jar 文件的META-INF 目录。
persistence.xml 文件指定实体Bean 使用的数据源及EntityManager 对象的默认行为。persistence.xml 文件的配置说
明如下:
<?xml version="1.0"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="foshanshop"> <!--名称和注入em时指定的persistenceContext注释的unitName属性相同--> <jta-data-source>java:/DefaultMySqlDS</jta-data-source> <!--名称和数据源oracle-ds文件中jndi-name属性相同--> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> <!-- 调整JDBC抓取数量的大小: Statement.setFetchSize() --> <property name="hibernate.jdbc.fetch_size" value="18"/> <!-- 调整JDBC批量更新数量 --> <property name="hibernate.jdbc.batch_size" value="10"/> <!-- 显示最终执行的SQL --> <property name="hibernate.show_sql" value="true"/> <!-- 格式化显示的SQL --> <property name="hibernate.format_sql" value="true"/> </properties> </persistence-unit> </persistence>
容器在实例化SessionBean 后,就通过@PersistenceContext 注释动态注入EntityManager 对象。
如果persistence.xml 文件中配置了多个不同的持久化内容。在注入EntityManager 对象时必须指定持久化名称,可
以通过@PersistenceContext 注释的unitName 属性进行指定,例:
如果persistence.xml 文件中配置了多个不同的持久化内容。在注入EntityManager 对象时必须指定持久化名称,可
以通过@PersistenceContext 注释的unitName 属性进行指定,例:
@PersistenceContext(unitName="foshanshop")
EntityManager em;
如果只有一个持久化内容配置,不需要明确指定。
EntityManager em;
如果只有一个持久化内容配置,不需要明确指定。
persistence-unit 节点可以有一个或多个,每个persistence-unit 节点定义了持久化内容名称、使用的数据源及持久化产品专有属性。name 属性定义持久化名称。jta-data-source 节点指定实体Bean 使用的数据源JNDI 名称(如何配置数据源请参考下节“Jboss 数据源的配置”),如果应用发布在jboss 下数据源名称必须带有java:/前缀,数据源名称大小写敏感。properties 节点用作指定持久化产品的各项属性,各个应用服务器使用的持久化产品都不一样如Jboss
使用Hibernate。因为jboss 采用Hibernate,Hibernate 有一项属性hibernate.hbm2ddl.auto,该属性指定实体Bean 发布时是否同步数据库结构,如果hibernate.hbm2ddl.auto 的值设为create-drop,在实体Bean 发布及卸载时将自动创建及删除相应数据库表(注意:Jboss 服务器启动或关闭时也会引发实体Bean 的发布及卸载)。
关于hibernate 的可用属性及默认值你可以在[Jboss 安装目录]\server\default\deploy\ejb3.deployer\META-INF/persistence.properties 文件中看见.
小提示:如果你的表已经存在,并且想保留数据,发布实体bean 时可以把hibernate.hbm2ddl.auto 的值设为none 或
update,以后为了实体bean 的改动能反应到数据表,建议使用update,这样实体Bean 添加一个属性时能同时在数
据表增加相应字段。
小提示:如果你的表已经存在,并且想保留数据,发布实体bean 时可以把hibernate.hbm2ddl.auto 的值设为none 或
update,以后为了实体bean 的改动能反应到数据表,建议使用update,这样实体Bean 添加一个属性时能同时在数
据表增加相应字段。