`
hanxinyu
  • 浏览: 128174 次
  • 来自: henan china
社区版块
存档分类
最新评论

关于EntityManager的使用

阅读更多
EntityManager

Obtaining an EntityManager in a SessionBean
Before an EntityManager can be used it must be obtained from the container. The EntityManager can be set into your SessionBean by the Container though the @Resource annotation.

@Stateless
public class EmployeeDemoSessionEJB implements EmployeeDemoSession {

    @Resource protected EntityManager em;
    ...
    public EntityManager getEntityManger(){
        return this.em;
    }
    ...
Whenever the SessionBean is accessed an EnityManger will be available in the em attribute.

The EntityManager can also be retreived through a JNDI lookup.


    ...
    public EntityManager getEntityManager() {
        if (em == null}
            try{
                em = (EntityManager)(new InitialContext()).lookup("java:comp/ejb/EntityManager");
            } catch (Exception e){};
        }
        return em;
    }
    ...
Note that in this case the @Resource annotation is not used.

EntityManager persist()
The EntityManager persist(Object entity) API is used to mark a new instance for insert into the Database. It must only be called on new Entities. The value returned from the persist(Object entity) call is the same instance as was passed in.

@Stateless
public class EmployeeDemoSessionEJB implements EmployeeDemoSession {
    ...
    public void createEmployee(String fName, String lName) {
        Employee employee  = new Employee();
        employee.setFirstName(fName);
        employee.setLastName(lName);
        em.persist(employee);
    }
    ...
EntityManager merge()
To integrate a bean read in a different transaction or provided by the client into the current transaction use the merge(Object entity) API. The result will be an instance of the provided entity. The state of that entity will also be available in the returned instance.

@Stateless
public class EmployeeDemoSessionEJB implements EmployeeDemoSession {
    ...
    public void updateAddress(Address addressExample) {
        em.merge(addressExample);
    }
    ...
EntityManager remove()
To delete a bean from the database use the remove(Object entityBean) API.

@Stateless
public class EmployeeDemoSessionEJB implements EmployeeDemoSession {
    ...
    public void removeEmployee(Integer employeeId) {
        Employee employee = (Employee)em.find("Employee", employeeId);
        ...
        em.remove(employee);
    }
    ...
EntityManager find()
When a primary key query is required the find(String entityName, Object primaryKey) or find(Class entityClass, Object primaryKey) API can be used.

@Stateless
public class EmployeeDemoSessionEJB implements EmployeeDemoSession {
    ...
    public void removeEmployee(Integer employeeId) {
        Employee employee = (Employee)em.find("Employee", employeeId);
        ...
        em.remove(employee);
    }
    ...
EntityManager flush()
The EntityManager flush() API is used to send updates to the database within a transaction, subsequent queries within the same transaction will return the updated data. This is usefull if a particular transaction spans mutiple operations or pages, similar to a "wizard".

@Stateless
public class EmployeeDemoSessionEJB implements EmployeeDemoSession {
    ...
    public void terminateEmployee(EmploymentPeriod period, Integer employeeId){
   Employee employee = (Employee)em.find("Employee", employeeId);
       employee.setPeriod(period);
       em.flush();
    ...
EntityManager refresh()
When the latest data is required or when changes need to be reverted in an Entity Bean the refresh(Object entity) API can be used.


...
public void undoUpdateEmployee(Integer employeeId){
Employee employee = (Employee)em.find("Employee", employeeId);
em.refresh(employee);
}
    ...
EntityManager createQuery()
In order to perform queries based on more complex criteria queries can be created using the createQuery(String ejbqlString) or createNamedQuery(String name) see the How To on Queries for more specific information.

@Stateless
public class EmployeeDemoSessionEJB implements EmployeeDemoSession {
    ...
    public Collection findLargeProjectsWithBudgetLargerThan(double budget) {
        Collection projects = em.createNamedQuery("findWithBudgetLargerThan")
             .setParameter("amount", budget).getResultList();
        return projects;
    }

    public Project findOneProjectByQuery(Vector params) {
        Project project = (Project)em.createQuery("SELECT OBJECT(project) FROM Project project WHERE project.name = :projectName")
                .setParameter("projectName", params.firstElement()).getSingleResult();
        return project;
    }
   ...
EntityManager createQuery(Expression)
If TopLink's java like expressions are prefered for the query criteria, that functionality is available though the createQuery(Expression expression, Class resultType) api on the OC4J specific EntityManager implementation oracle.toplink.ejb.cmp3.EntityManager.

@Stateless
public class EmployeeDemoSessionEJB implements EmployeeDemoSession {
    ...
    public Collection findManyProjectsByQuery(Vector params) {
        ExpressionBuilder builder = new ExpressionBuilder();
        Query query = ((oracle.toplink.ejb.cmp3.EntityManager)em)
            .createQuery(builder.get("name").equals(builder.getParameter("projectName")), Project.class);
        query.setParameter("projectName", params.firstElement());
        Collection projects = query.getResultList();
        return projects;
    }
    ...
分享到:
评论

相关推荐

    怎么学好qt 的一些建议

    怎么学好qt 的一些建议

    ASTM E1019-24 用燃烧和惰性气体熔化技术测定钢、铁、镍和钴合金中碳、硫、氮和氧的标准试验方法.rar

    ASTM E1019-24 用燃烧和惰性气体熔化技术测定钢、铁、镍和钴合金中碳、硫、氮和氧的标准试验方法.rar

    2014NOIP提高组初赛试题及参考答案.pdf

    2014NOIP提高组初赛试题及参考答案

    Offer资讯交流Web系统 2024免费JAVA毕设

    2024免费毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 技术栈:Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode。

    通知基础设施软件市场,未来几年年复合增长率CAGR为8.3%

    通知基础设施软件是一组工具和服务,使应用程序能够通过各种渠道(如推送通知、短信、电子邮件和应用内消息)向用户发送通知。它处理可靠有效地路由、格式化和传递消息的复杂性。该软件通常包括模板管理、用户偏好、交付跟踪和分析等功能,以优化通信和用户参与度。 根据QYResearch最新调研报告显示,预计2031年全球通知基础设施软件市场规模将达到63.20亿美元,未来几年年复合增长率CAGR为8.3%。 根据QYResearch头部企业研究中心调研,全球范围内通知基础设施软件生产商主要包括Twilio、Klaviyo等。2023年,全球前三大厂商占有大约72.0%的市场份额。 目前,全球核心厂商主要分布在北美。 就产品类型而言,目前平台标准服务是最主要的细分产品,占据大约61%的份额。 就产品类型而言,目前大企业是最主要的需求来源,占据大约63.5%的份额。 主要驱动因素: 1.云原生技术的普及: 容器化(如Docker)、编排(如Kubernetes)等云原生技术的发展,使得应用程序的部署、扩展和管理更加便捷高效。通知基础设施需要能够很好地集成到云原生环境中,支持容器化的部署和

    微信小程序线上水果店系统 2024免费JAVA毕设

    2024免费毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 技术栈:Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode。

    #_ssm_060_mysql_在线捐赠系统.zip

    #_ssm_060_mysql_在线捐赠系统

    #_ssm_093_mysql_研究生档案管理系统wlw_.zip

    #_ssm_093_mysql_研究生档案管理系统wlw_

    Linux官方直接下载的源码,附带搭建标准Linux环境教程

    适合学习Linux人士下载与阅读。 同步的教程:https://blog.csdn.net/weixin_47702410/article/details/145601490

    ros系统中,手势识别控制乌龟运动

    ROS(Robot Operating System)系统是机器人领域广泛应用的开源框架,它提供了一整套工具、库以及协议,使得机器人软件开发变得更加便捷。在这个“ros系统中,手势识别控制乌龟运动”的项目中,我们主要探讨如何结合ROS、OpenCV以及一个模拟的“乌龟”(Turtlebot)来实现手势识别和机器人控制。 我们要了解ROS的核心概念。ROS由多个“节点”(Nodes)组成,这些节点通过发布和订阅消息进行通信。在这个场景下,我们可以创建两个节点:一个是负责手势识别的节点,另一个是控制乌龟运动的节点。 OpenCV,全名Open Source Computer Vision Library,是一个强大的计算机视觉库,它包含了众多图像处理和计算机视觉的算法。在这个项目中,OpenCV将用于手势识别。你可以使用它的图像捕获功能获取摄像头输入,然后应用如Haar级联分类器或HOG+SVM等方法进行手势检测和分类。例如,可以训练一个模型来识别特定的手势,如“向前”、“向后”、“左转”和“右转”,这些手势对应于乌龟的前进、后退和转向命令。 为了实现手势与乌龟动作的对应,你需要创建一个消

    #_ssm_146_mysql_作业提交与批改程序_.zip

    #_ssm_146_mysql_作业提交与批改程序_

    AEB系统:基于CCRs前方静止车辆追尾测试的Simulink程序与车辆逆动力学模型研究,"AEB系统:CCRs前方静止车辆追尾测试程序详解-基于Simulink与Carsim的制动安全距离计算与逆

    AEB系统:基于CCRs前方静止车辆追尾测试的Simulink程序与车辆逆动力学模型研究,"AEB系统:CCRs前方静止车辆追尾测试程序详解——基于Simulink与Carsim的制动安全距离计算与逆动力学模型应用",AEB程序 CCRs(Car-to-Car Rear Stationary)前方静止车辆追尾测试 车辆行驶过程中,利用主动制动的方式躲避前方障碍物。 主要利用制动安全距离进行判断,并利用车辆逆动力学模型进行制动主缸压力计算。 包含:Simulink程序 Carsim cpr文件 ppt说明文档 ,AEB程序; CCRs前方静止车辆追尾测试; 主动制动避障; 制动安全距离判断; 车辆逆动力学模型; Simulink程序; Carsim cpr文件; ppt说明文档。,"AEB程序:基于制动安全距离与逆动力学模型的车辆避障系统测试"

    基于 COMSOL 和 Simulink 的电磁铁悬浮控制:PID 算法、模型搭建与参数调试

    该文档围绕电磁铁与U型衔铁系统的仿真控制展开,介绍了在COMSOL和Simulink软件中实现联合控制的详细流程,旨在达成衔铁稳定悬浮控制的目标。 1. **模型构建**:在COMSOL中,先创建3D模型并选择“磁场,无电流(mfnc)”物理场接口,用基本几何形状构建电磁铁和衔铁,设置各部分尺寸与15mm初始间隙。接着添加合适材料,分配材料属性,设置物理场,如电流激励、边界条件,进行网格划分,重点细化关键区域。 2. **求解与连接**:根据需求选择稳态或瞬态求解,配置求解器并计算。同时,在COMSOL中定义传递给Simulink的变量,在Simulink中搭建PID控制算法模型,实现数据交互,将Simulink计算的新电流值反馈回COMSOL,用于调整电磁铁电流。 3. **附加需求实现**:延长衔铁长度需修改几何形状、重新划分网格和求解设置;给定衔铁初始速度要将问题类型设为瞬态并设置初始速度向量;通过调整PID参数和优化电磁铁布局等,确保电磁力稳定控制衔铁。 4. **结果分析**:求解完成后,在COMSOL中查看电磁场分布、衔铁位移等结果,检查衔铁悬浮位置是否稳定在8mm,根据结

    Record-Mode 备案免关站插件,让 WordPress 备案不影响 SEO 和收录

    专为 WordPress 网站设计的实用工具,旨在帮助网站在备案期间无需关闭即可正常收录所有页面的信息,利于SEO。 功能特性 免关站展示:开启插件后,非管理员用户访问网站时,会看到以半透明遮罩层或不透明全屏遮罩样式呈现的备案提示信息,让访客知晓网站正在备案,无需关闭网站影响正常运营。 灵活配置:插件提供丰富的自定义选项。用户可在后台轻松设置提示信息的标题、内容,满足不同场景的需求;还能选择显示样式,半透明遮罩层样式既提示访客又能隐约看到网站背景,不透明全屏遮罩样式则更突出提示内容。 便捷启用:通过后台的 “是否启用” 勾选框,用户可以快速控制插件的开关状态,灵活决定何时展示备案提示。

    MATLAB信号处理工具箱应用:从基础操作到高级技术详解

    内容概要:本文详述了MATLAB信号处理工具箱的功能与应用场景,涵盖信号的时域和频域分析、各种滤波器设计及应用、常见信号变换技术和特征提取等方面。具体来说,文中介绍了一些常见的信号表示形式和基本操作,接着阐述了时域分析中常用的可视化手段、统计特性和时延估计方法。对于频域分析,则强调了傅里叶变换、功率谱密度估计等功能的价值。除此之外,还有详细的章节讨论了FIR和IIR滤波器的特点及其在实际工程中的运用方式。为了进一步展示该工具箱的能力,文中列举了多个具体的案例研究,比如利用小波变换来进行非平稳信号分析或者使用Hilbert变换解析调制信号等。此外,文章最后也简要提及了自适应滤波器、盲源分离技术等相关进阶主题。 适用于那些希望提升自己在数字信号处理领域技能的学生和技术人员。无论是刚开始接触DSP还是已经有一定经验想要加深理解的人都能找到有用的参考资料。

    基于SSM的校园短期闲置资源置换平台(有报告)。Javaee项目。ssm项目。

    重点:所有项目均附赠详尽的SQL文件,这一细节的处理,让我们的项目相比其他博主的作品,严谨性提升了不止一个量级!更重要的是,所有项目源码均经过我亲自的严格测试与验证,确保能够无障碍地正常运行。 1.项目适用场景:本项目特别适用于计算机领域的毕业设计课题、课程作业等场合。对于计算机科学与技术等相关专业的学生而言,这些项目无疑是一个绝佳的选择,既能满足学术要求,又能锻炼实际操作能力。 2.超值福利:所有定价为9.9元的项目,均包含完整的SQL文件。如需远程部署可随时联系我,我将竭诚为您提供满意的服务。在此,也想对一直以来支持我的朋友们表示由衷的感谢,你们的支持是我不断前行的动力! 3.求关注:如果觉得我的项目对你有帮助,请别忘了点个关注哦!你的支持对我意义重大,也是我持续分享优质资源的动力源泉。再次感谢大家的支持与厚爱! 4.资源详情:https://blog.csdn.net/2301_78888169/article/details/141761917 更多关于项目的详细信息与精彩内容,请访问我的CSDN博客!

    #_ssm_011_mysql_医院院内物资管理系统_.zip

    #_ssm_011_mysql_医院院内物资管理系统_

    CSP2019提高组初赛参考答案.pdf.baiduyun.uploading.cfg

    CSP2019提高组初赛参考答案.pdf.baiduyun.uploading

    #_ssm_077_mysql_动漫之家系统_.zip

    #_ssm_077_mysql_动漫之家系统_

    #_ssm_103_mysql_团员管理系统_.zip

    #_ssm_103_mysql_团员管理系统_

Global site tag (gtag.js) - Google Analytics