实体(Entity)Bean

转载 2007年09月24日 15:18:00

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence>
 <persistence-unit name="webapp">
  <jta-data-source>java:/webappDS</jta-data-source>
  <properties>
   <property name="hibernate.hbm2ddl.auto" value="update" />
  </properties>
 </persistence-unit>
</persistence>

persistence-unit 节点可以有一个或多个,每个persistence-unit 节点定义了持久化内容名称、使用的数据源名称及Hibernate属性。name 属性用作设置持久化名称。jta-data-source 节点用作指定实体Bean使用的数据源名称,指定数据源名称时java:/ 前缀不能缺少,数据源名称大小写敏感。properties 节点用作指定Hibernate的各项属性,如果hibernate.hbm2ddl.auto的值设为create-drop,在实体Bean发布及卸 载时将自动创建及删除相应数据库表(注意:Jboss服务器启动或关闭时会引发实体Bean的发布及卸载)。

如果你的表已经存在,并且想保留数据,发布实体bean时可以把hibernate.hbm2ddl.auto的值设为none或update,以 后为了实体bean 的改动能反应到数据表,建议使用update,这样实体Bean添加一个属性时能同时在数据表增加相应字段

persistence.xml要放到META-INF文件下,并打包进JAR文件里才行。

实体Bean

package ejb;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

@Entity
@Table(name="T_USER")//表名为T_USER,后面getUserList()方法里,用的是:from TUser u order by name,和EntityBean的类名相同。
@SuppressWarnings("serial")

public class TUser implements Serializable {
 private String name;
 private String sex;
 private Date birthday;
 
 @Id
 @Column(name="name",length=20,nullable=false)
 public String getName(){
  return name;
 } 
 
 public void setName(String name){
  this.name = name;
 }
 
 @Column(name="sex",length=1,nullable=false)
 public String getSex(){
  return sex;
 }
 
 public void setSex(String sex) throws Exception{
  if(sex.matches("[FMSfms]")){
   this.sex = sex;
  }else{
   throw new Exception("Sex Error!Must be in S,F,M");
  }
 }
 
 @Column(name="birthday")
 public Date getBirthday(){
  return birthday;
 }
 
 public void setBirthday(Date birthday){
  this.birthday = birthday;
 }
}

@Entity注释指明这是一个实体Bean,每个实体Bean类映射数据库中的一个表,@Table注释的name属性指定映射的数据表名称.

实体Bean的每个实例代表数据表中的一行数据,行中的一列对应实例中的一个属性。

@Column注释定义了映射到列的所有属性,如列名是否唯一,是否允许为空,是否允许更新等,他的属性介绍如下:
 ·name: 映射的列名。如:映射Person表的PersonName列,可以在name属性的getName 方法上面加入
 @Column(name = "PersonName"),如果不指定映射列名,容器将属性名称作为默认的映射列名。
 ·unique: 是否唯一
 ·nullable: 是否允许为空
 ·length: 对于字符型列,length属性指定列的最大字符长度
 ·insertable: 是否允许插入
 ·updatable: 是否允许更新
 ·columnDefinition: 定义建表时创建此列的DDL
 ·secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
@Id 注释指定personid属性为表的主键,它可以有多种生成方式:
 ·TABLE:容器指定用底层的数据表确保唯一。
 ·SEQUENCE:使用数据库的SEQUENCE 列来保证唯一
 ·IDENTITY:使用数据库的INDENTIT列来保证唯一
 ·AUTO:由容器挑选一个合适的方式来保证唯一
 ·NONE:容器不负责主键的生成,由调用程序来完成。
@GeneratedValue注释定义了标识字段的生成方式

实体bean需要在网络上传送时必须实现Serializable接口,否则将引发java.io.InvalidClassException例外。


用户实体Bean的Session Bean

package ejb;

import java.util.Date;
import java.util.List;
import ejb.TUser;

public interface TUserDAO {
 public boolean addUser(String name,String sex,Date birthday);
 public boolean updateUser(TUser user);
 public boolean deleteUser();
 public List getUserList();
}

package ejb;

import javax.ejb.Stateless;
import javax.ejb.Remote;
import javax.persistence.*;
import java.util.Date;
import java.util.List;
import ejb.TUserDAO;
import ejb.TUser;

@Remote(TUserDAO.class)
@Stateless
public class TUserDAOBean implements TUserDAO {
 @PersistenceContext(unitName="webapp")
 protected EntityManager em;
 
 public boolean addUser(String name,String sex,Date birthday){
  try{
  TUser user = new TUser();
  user.setName(name);
  user.setSex(sex);
  user.setBirthday(birthday);
  em.persist(user);
  }catch(Exception e){
   //e.printStackTrace();
   return false;
  }
  return true;
 }
 
 public boolean updateUser(TUser user){
  try{
   em.merge(user);
  }catch(Exception e){
   e.printStackTrace();
   return false;
  }
  return true;
 }
 
 public boolean deleteUser(){
  return false;
 }
 
 public List getUserList(){
  try{
   Query query = em.createQuery("from TUser u order by name");
   List list = query.getResultList();
   em.clear();
   return list;
  }catch(Exception e){
   e.printStackTrace();
   return null;
  }
 }
}


EntityManager em,EntityManager 是由EJB容器自动地管理和配置的,不需要用户自己创建,他用作操作实体Bean
em.find ()方法用作查询主键记录。em.persist()方法用作向数据库插入一条记录。在类中并没有看到对EntityManager em进行赋值,后面却可以直接使用他。这是因为在实体Bean加载时,容器通过@PersistenceContext注释动态注入 EntityManager 对象。
如果persistence.xml文件中配置了多个不同的持久化内容。你需要指定持久化名称注入EntityManager 对象,可以
通过@PersistenceContext注释的unitName属性进行指定,例:
@PersistenceContext(unitName="webapp")
EntityManager em;
如果只有一个持久化内容配置,不需要明确指定。


JSP调用:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import = "ejb.*" %>
<%@ page import = "java.text.SimpleDateFormat" %>
<%@ page import = "javax.naming.*" %>
<%@ page import = "java.util.Iterator" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</head>
<body>
<%
InitialContext ctx = new InitialContext();
TUserDAO userDao = (TUserDAO) ctx.lookup("TUserDAOBean/remote");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
try{
 if(userDao.addUser("werewi","M",sdf.parse("19830714")))
  out.println("Success");
 else
  out.println("Failure");
 
 Iterator it = userDao.getUserList().iterator();
 while(it.hasNext()){
  TUser user = (TUser) it.next();
  out.println(user.getName() + " " + user.getSex() + " " + sdf.format(user.getBirthday()));
 }
 
}catch(Exception e){
 out.println(e.toString());
}
%>
</body>
</html>

 

实体bean(entity)配置,jpa增删改api,JPAsql增删改

1.ORM框架必然发展趋势: jdbc->hibernate(是产品,实现jpa规范)->jpa(是规范,不是产品)。 ps:运用jpa规范的API进行编程,不对Hiberbate,topLink...

EJB---->实体Bean(Entity Bean) 持久化 和 persistence.xml 配置文件

持久化是位于JDBC 之上的一个更高层抽象。持久层将对象映射到数据库,以便在查询、装载、更新,或删除对 象的时候,无须使用像JDBC 那样繁琐的API。在EJB 的早期版本中,持久化是EJB 平台的...

Entity_Bean

  • 2012年11月04日 11:08
  • 1.13MB
  • 下载

Entity_Framework_实体框架

  • 2013年01月28日 15:46
  • 874KB
  • 下载

斯坦福命名实体识别(Stanford Named Entity Recognizer)

Stanford Named Entity Recognizer

第13章_实体Bean主键映射.ppt

  • 2011年11月01日 17:47
  • 189KB
  • 下载

(无法推断有效的主键。已排除该表/视图)Entity Framework 无法对没有主键的视图映射实体的解决办法

我们在使用Entity Framework的时候经常会把数据库中的某一个视图映射为EF的实体,但是如果数据库视图中的列没有包含表的主键列,EF会报出警告说视图没有主键,导致视图映射为实体失败,错误如下...
  • ylx4399
  • ylx4399
  • 2016年03月08日 17:06
  • 1372

Entity_Framework_实体框架.doc

  • 2012年12月26日 11:29
  • 874KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实体(Entity)Bean
举报原因:
原因补充:

(最多只允许输入30个字)