`
yadsun
  • 浏览: 181332 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ejb3持久化实体时的异常

阅读更多

对某个Entity进行持久化操作时发生如下异常 Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: xxx 原因:应该使用merge的地方使用了persist

 

补充em.merge()与em.persist()的区别,如下(以下内容来自网络)

 

Either way will add an entity to a PersistenceContext, the difference is in what you do with the entity afterwards.

Persist takes an entity instance, adds it to the context and makes that instance managed (ie future updates to the entity will be tracked)

Merge creates a new instance of your entity, copies the state from the supplied entity, and makes the new copy managed. The instance you pass in will not be managed (any changes you make will not be part of the transaction - unless you call merge again).

 

Entity e = new MyEntity();

// scenario 1
// tran starts
em.persist(e); 
e.setSomeField(someValue); 
// tran ends, and the row for someField is updated in the database

// scenario 2
// tran starts
e = new MyEntity();
em.merge(e);
e.setSomeField(anotherValue); 
// tran ends but the row for someField is not updated in the database (you made the changes *after* merging

// scenario 3
// tran starts
e = new MyEntity();
MyEntity e2 = em.merge(e);
e2.setSomeField(anotherValue); 
// tran ends and the row for someField is updated (the changes were made to e2, not e)

 

0
2
分享到:
评论

相关推荐

    EJB3持久化规范中文版

    在EJB3中,实体类用来表示持久化的对象,即可以被存储到数据库中的对象。实体类必须遵循以下规则: - **类本身**:实体类必须是一个公共类,并且有一个无参数的公共构造函数。 - **持久化字段和属性**:实体类中用于...

    EJB3.0持久化开发手册

    这包括实体事件监听器、继承策略、复合主键、多租户支持、级联操作、懒初始化异常等更复杂的概念,这些都是EJB3.0持久化开发手册中会详细讲解的内容。 通过学习《EJB3.0持久化开发手册》,开发者能够掌握如何利用...

    实战EJB之四 开发实体CMP(EJB 1.1规范) .doc

    【实战EJB之四 开发实体CMP(EJB 1.1规范)】 实体Bean(Entity Bean)在Java企业版(Java EE)中扮演着关键角色,它主要用于表示后端数据库中的持久化...但了解EJB 1.1中的CMP仍然是理解和掌握EJB持久化机制的基础。

    JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作

    - `@PostPersist`:在持久化实体之后调用。 - `@PreUpdate`:在更新实体之前调用。 - `@PostUpdate`:在更新实体之后调用。 - `@PreRemove`:在删除实体之前调用。 - `@PostRemove`:在删除实体之后调用。 - `...

    ejb3_structs

    2. **简化持久化**:通过JPA(Java Persistence API)和ORM(对象关系映射),EJB3.0使得数据持久化更为简单,例如使用`@Entity`和`@Table`注解定义实体类,`@Id`指定主键,`@GeneratedValue`自动生成主键值。...

    EJB3最新学习教程,适合初学者

    3. **实体Bean:**用于持久化数据,但在EJB3中,实体Bean已被JPA(Java Persistence API)取代。 #### 三、EJB3 开发环境搭建 1. **安装JDK:**确保安装最新版JDK。 2. **配置IDE:**选择一款支持EJB3的集成开发...

    EJB实体Bean与事物管理

    在EJB规范中,实体Bean(Entity Bean)是一种特殊类型的组件,用于持久化数据到数据库,模拟业务对象。事务管理则是EJB中的重要组成部分,确保了业务操作的一致性和可靠性。 1. **EJB实体Bean** - **定义**: EJB...

    JSF+EJB3的J2ee项目源码

    3. **Entity Beans**:代表持久化数据,通过JPA与数据库进行交互。 **JSF与EJB3的集成** 在JSF和EJB3的集成中,JSF处理用户界面交互,而EJB3则负责处理业务逻辑。JSF可以通过EL表达式调用EJB3的Session Beans方法,...

    EJB.rar_EJB3_EJB3.0_ejb

    持久化管理 EJB 3.0结合了Java Persistence API (JPA),使得数据库操作变得更加简单。通过`@Entity`注解定义实体类,`@Table`指定映射的数据库表,`@Id`定义主键,可以轻松实现对象关系映射。同时,`@...

    struts2+spring+ejb3源代码(完整版)

    4. EJB3的实体Bean是如何通过JPA(Java Persistence API)或Hibernate进行数据持久化的。 5. Spring如何管理Struts2和EJB3组件的生命周期,以及如何实现AOP功能。 6. 如何在Web应用中整合这三个框架,使它们协同工作...

    JBOSS6.0.0M4发布EJB3测试

    总之,JBOSS6.0.0M4发布EJB3测试涉及到Java EE的核心技术,包括EJB3的注解驱动开发、JPA的数据持久化和JTA的事务管理,以及使用Arquillian等工具进行测试。这对于任何想要深入理解和应用Java EE的企业级开发人员来说...

    ejb3加数据库的简单例子

    EJB(Enterprise JavaBeans)3.0是Java EE(企业版)平台的一部分,提供了一种标准的方法来开发分布式、事务处理和持久化的业务组件。EJB3简化了许多以往版本中的复杂性,使得数据库操作更加直观。 首先,我们需要...

    EJB3入门

    实体Bean(Entity Beans)是EJB3中的数据持久化组件,通常对应数据库表。JPA(Java Persistence API)是EJB3实现ORM(对象关系映射)的标准接口,允许开发者以面向对象的方式操作数据库。通过`@NamedQuery`可以定义...

    ejb3.rar_EJB3 struts2_MyEclipse EJ_ejb strut jboss_jboss_struts2

    实体Bean(Entity Beans)用于持久化数据,会话Bean(Session Beans)则用于业务逻辑处理。 Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用程序框架,用于构建更清晰、结构化的代码。它提供了...

    EJB设计模式Ejb中涉及到的设计模式详解

    - 隔离业务逻辑和数据:商业逻辑被封装在Session EJB中,与实体EJB的数据层分离,提高模块化。 - 提升性能:通过批量处理和缓存策略,减少对数据库的直接访问。 - 易于维护和开发:客户端只需与Session EJB交互,...

    EJB3使用说明中文版

    **6.6 持久化实体管理器 ENTITYMANAGER**: - 提供了对实体的 CRUD 操作。 - 使用 `@PersistenceContext` 注入 EntityManager。 **6.6.1 Entity 获取 find() 或 getReference()**: - `find()` 方法根据主键查找...

    第一个EJB访问数据库例子

    - **实体Bean**:如果数据持久化需求,可以使用实体Bean,它代表数据库表的行。实体Bean通常由容器管理,自动处理CRUD操作(创建、读取、更新和删除)。 - **会话Bean**:对于非持久化数据的业务逻辑,我们可以创建...

    ejbCreate函数用于初始化一个EJB实例

    - **激活阶段**: `ejbActivate`方法会在EJB从钝化状态恢复时被调用,这在EJB持久化到磁盘后重新加载时发生。 - **初始化阶段**: `ejbPostConstruct`方法是JSR 250规范定义的,作为依赖注入后的初始化方法,它通常...

    ejb之实体Bean与cloudscape数据库事务处理代码

    在Java世界里,EJB(Enterprise JavaBeans)是用于构建企业级应用的重要组件模型,尤其在J2EE 1.3版本中,实体Bean(Entity Beans)是处理业务对象持久化的主要工具。实体Bean通常代表应用程序中的数据模型,如...

Global site tag (gtag.js) - Google Analytics