EJB之JPA(save操做)

上一章咱们介绍了EJB的数据源配置.这一章咱们介绍一下基本的EJB save操做.java

首先,创建一个EJB Bean.数据库

package com.cnblogs.pojo; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; /** * 定义这是一个entityBean * @author asus * */ @Entity @Table(name="person")//映射表名称为person
public class Person implements Serializable{//实现可序列化接口.方便远程调用
    /** * 这个ID是必定要定义的,hibernate也同样要定义. * 若是咱们只定义一个ID.不定义他的生成策略,就至关与没有生成策略,要咱们本身设定他的ID值. * 若是咱们指定他的生成策略.就是@GeneratedValue.这样,就至关与会自动生成ID. * 他会根据数据库选择生成策略.若是是MYSQL.就是以IDENTITY方式生成主键 * 若是是ORACLE就是以Sequence方式生成主键. * 跟Hibernate的native是一个意思. * @GeneratedValue(strategy=GenerationType.TABLE) * 这种方式经过一个表来实现主键id的自增,这种方式不依赖于具体的数据库,能够解决数据迁移的问题 * 因此,这个主键的方式,咱们不设置括@GeneratedValue的属性.或者设置为TABLE.方便数据迁移. 
   * 关于table策略.下章会详细讲解.若是咱们须要用String类型的ID.数据库又自动生成.也就是hibernate的UUID也是能够的.不过须要引入JAR包.下一章一样会给出方法.
*/ @Id @GeneratedValue private int id; /** * column字段主要有如下属性: * name:字段名 * unique:是否惟一 * nullable:是否能够为空 * inserttable:是否能够插入 * updateable:是否能够更新 * columnDefinition:定义建表时建立此列的DDL * secondaryTable:从表名。若是此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。 * 这里咱们根据状况经常使用的是name,unique,nullable */ @Column(name="username",unique=false) private String name; @Column(name="password",nullable=false) private String passwd; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; } }

写一下service和serviceImplsession

package com.cnblogs.service; import com.cnblogs.pojo.Person; public interface PersonService { public void addPserson(Person p); }
package com.cnblogs.serviceImpl; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import com.cnblogs.pojo.Person; import com.cnblogs.service.PersonService; @Stateless(name="personService") @Remote public class PersonServiceImpl implements PersonService { /** * 在这里注入EntityManager至关与Hibernate的session * 这里的unitName就是persistence.xml的JTA数据源. 若是这个方法里想对多个数据库操做.就再注入一个EntityManager */ @PersistenceContext(unitName = "ejb_01PU") private EntityManager em; public void addPserson(Person p) { /** * 在JPA里.保存是persist.在HIBERNATE里.叫SAVE.只是名字换了. */ em.persist(p); } }

而后咱们写一个WEB应用.调用这个方法.首先添加EJB本地项目的依赖less

而后写一个TEST类ide

package com.cnblogs.test; import javax.naming.InitialContext; import javax.naming.NamingException; import com.cnblogs.pojo.Person; import com.cnblogs.service.PersonService; public class Test { public static void main(String[] args) throws NamingException { InitialContext context = new InitialContext(); PersonService ps = (PersonService) context.lookup("personService/remote"); Person p1 = new Person(); p1.setName("张三"); p1.setPasswd("zhangsan"); ps.addPserson(p1); } }

添加jndi.properties到WEB项目的根目录.this

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost

而后把JBOSS的JAR添加到WEB项目.(JBOSSHOME/client下全部的JAR包)url

而后启动JBOSS.添加2个项目进去.spa

运行TEST类.hibernate

OK.结束.code

相关文章
相关标签/搜索