实体(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>

 

6实体 Bean(Entity Bean)

v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML)...
  • lord_is_layuping
  • lord_is_layuping
  • 2008年09月24日 09:50
  • 754

909422229__entity、pojo、javabean的理解区别

总结:实际上entity与pojo与javabean都是JAVA对象,可能有的地方叫法不同,实际上功能都是一样的,唯一不同是用于范围不同,请看下面详细分析。 Java Bean、POJO、 Ent...
  • a909422229
  • a909422229
  • 2017年04月26日 11:34
  • 1553

bean、javabean、entity、dto、ejb、pojo都是些什么鬼

1、javaBean javaBean是一种Java语言写成的可重用组件。为写成JavaBean,类必须是具体和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将...
  • alabadazi
  • alabadazi
  • 2015年11月27日 22:35
  • 2612

JavaBean, EntityBean, POJO, PO, BO,VO,DTO,DAO 区别

先记一部分 这个类是共有类(public),并且必须有一个公共的缺省构造函数。 这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。(JavaBean是一个定义了系...
  • ID_Rin
  • ID_Rin
  • 2017年01月07日 01:08
  • 896

J2EE学习笔记五:entity bean概念

    Entity Bean提供了一个关系数据库的面向对象的抽象,它能同时从面向对象技术和面向过程技术中获益。既然Entity Bean和Session Bean都是Enterprise Bean,...
  • CMTobby
  • CMTobby
  • 2007年11月28日 17:26
  • 2144

EntityBean关系

Entity Bean之间也可以进行继承。子类所创建的表自动拥有父类定义的一些字段。如果不想要该父类生成表,那就把它定义为abstract class。@Inheritance的strategy设为T...
  • xeseo
  • xeseo
  • 2013年07月25日 12:20
  • 668

java微服务架构中改造时,引用旧jpa实体引发的血案

背景 旧项目环境:jdk1.6,spring+hibernate/jpa+Struct2/spring mvc 改目标:jdk1.8 spring cloud微服务 在微服务中直接引用旧项目的实体包...
  • nnsword
  • nnsword
  • 2017年07月28日 12:30
  • 275

【调研】关于Entity Linking(实体链接)的材料收集

1. https://www.microsoft.com/cognitive-services/en-us/entity-linking-intelligence-service 微软的实体链接服务...
  • kexinmei
  • kexinmei
  • 2016年12月26日 15:41
  • 1587

Android项目中实体类entity的作用

估计很多入门安卓的朋友对entity很困惑,为什么要写实体类?有什么用?写来干什么? 对于实体类的理解我入门的时候也是困惑了好久,后面用多了才慢慢理解,这篇博客就当复习和笔记。Java中entity...
  • xmc281141947
  • xmc281141947
  • 2017年07月27日 11:27
  • 1322

XML学习笔记之文档类型定义(DTD) 和实体(ENTITY)

文档类型定义  (document type definition )DTD是规范的一部分。1 为何需要DTDxml文件不仅遵循xml的语法规则,而且受到dtd的约束DTD的优越性:正式而精确的定义词...
  • haskio
  • haskio
  • 2007年06月24日 14:41
  • 3809
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实体(Entity)Bean
举报原因:
原因补充:

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