You need to enable JavaScript to run this app. MikroORM中使用em.create创建的实体是否为托管实体?会被em.flush持久化吗?
优惠活动
大模型
产品
解决方案
定价
更多

MikroORM中使用em.create创建的实体是否为托管实体?会被em.flush持久化吗?

em.create 与实体托管状态、持久化规则说明

核心问题解答

  • 通过em.create创建的实体 默认不会自动处于托管状态
    em.create属于实体工厂方法,仅负责完成实例化、元数据校验、默认值填充、关联字段初始化操作,不会主动将实体纳入EntityManager的托管单元,不属于官方文档定义的两类托管实体范畴。
  • 这类实体 默认不会被em.flush触发持久化
    仅当满足以下任一条件时,em.create生成的实体才会进入持久化队列被em.flush处理:
    1. 手动调用em.persist()显式注册该实体为托管对象
    2. 该实体被其他已处于托管状态的实体通过带持久化级联的关联关系引用,被UoW自动纳入变更集计算
  • 完全可以创建出不会被em.flush持久化的em.create实例
    常见实现方式:
    • 不对该实例调用em.persist(),同时确保没有任何已托管实体通过带持久化级联的关系关联到它,保持其临时游离状态
    • 若已与托管实体建立关联但无需持久化,可在关联定义中移除PERSIST级联配置,阻断UoW的自动持久化扫描
    • 若实体已被误纳入待持久化队列,可调用em.detach()将其从托管单元中移除,em.flush将跳过该实例的持久化逻辑

注意:若em.create传入的参数中包含已托管的关联实体,这些关联对象本身仍保持托管状态,仅新创建的主实体不会自动被托管。

内容的提问来源于stack exchange,提问作者Vitor Rangel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 18:15:05