当前位置: 首页 > 知识库问答 >
问题:

为什么Extbase持久性管理器认为我的对象是新的?

史洛城
2023-03-14

我想在调度程序任务中更新一些Extbase对象。我正在调用存储库以获取所有对象。然后我设置该对象的一个属性,并尝试更新它。这给我带来了一个例外

给定给更新的“FFPI\FfpiNodeUpdates\Domain\Model\Node”类型的对象必须已被持久化,但它是新的。

供应商/typo3/cms/typo3/sysext/extbase/Classes/Persistence/Generic/PersistenceManager。菲律宾:237

跟踪是:
0: TYPO3\CMS\Extbase\Perith\Generic\PeristextManager
1: TYPO3\CMS\Extbase\Perith\Repository
2: FFPI\FfpiNodeUpdates\WG\NotificationWG
3: FFPI\FfpiNodeUpdates\WG\NotificationWG
4: TYPO3\CMS\Scheduler\Scheduler
5: TYPO3\CMS\Scheduler\Controller\SchedulerModuleController
...

我的代码可以缩短为这样

$nodes = $this->nodeRepository->findAll()->toArray();
foreach ($nodes as $node){
    $this->myUpdateFunction($node);
}
private function myUpdateFunction(Node $node)
{
    $node->setOnline(true);
    $this->nodeRepository->update($node); // <- Gives the exception
}

它在7.6中运行良好,但在8.7中不再运行

我试图用
*依赖注入(根本不起作用)获取存储库
*通用::makeInstance()(我得到回购,但有例外)
*对象管理器-

更新:我在9.5版本中也有这个问题

共有1个答案

陈昂熙
2023-03-14

首先,您应该只使用makeInstance()函数来获取对象管理器,然后应该使用它而不是makeInstance()来处理对象

对于您的主要问题,我不确定它是否有帮助,但您可能必须使用PersistanceManager-

我希望这有帮助^^

 类似资料:
  • 我试图集成Spring和JSF,我坚持使用对象。我不想处理事务(begin-commit等) 经过一些谷歌,我可以找到一个答案,给我需要在这个链接 我使用eclipselink作为ORM和Oracle 11g数据库,并使用带有Maven的Glassfish Server3.1。我更喜欢Spring配置的注释。我用 相关类中的注释。我的名称是E_DefterManagementPU,我的事务类型是J

  • 我有一个将Apache Ignite用作单节点集群的应用程序。也就是说,Ignite由应用程序启动和停止,其生命周期与应用程序匹配。 Ignite缓存同时启用了持久存储和读通。所以 首先调用cache.get 所有这一切似乎都运转得很好。这是我的问题:有时(经常)当应用程序被跳转或重新部署时,持久存储区数据目录就Apache Ignite而言仍然保持锁定状态。因此,Ignite会无声地创建一个新的

  • 我有一个用例,我想我需要两个实体管理器,它们访问相同的持久性单元。所以本质上,我希望在同一个数据库上有两个持久性上下文。这是否可以通过PersistenceContext注释实现? 我想写以下内容,但不知道如何告诉JPA注入两个不同的manager实例。 我想我可以切换到应用程序管理的事务,然后我可以使用工厂创建另一个事务。但是我不想自己管理事务,如果不是绝对必要的话。

  • 问题内容: 我是Java世界和JPA的新手。我在学习JPA时遇到了许多新术语,例如Entity,persistence。在阅读时,我无法理解 Persistence Context 的确切定义。 谁能用简单的外行术语解释它?与中使用的数据有什么关系? 例如,我发现此定义太复杂而难以理解: 持久性上下文是一组实体,因此对于任何持久性标识,都有一个唯一的实体实例。 问题答案: 持久性上下文处理一组实体

  • 持久性上下文是一组实体,因此对于任何持久性标识都有一个唯一的实体实例。

  • 根据OWL 2中对称和非对称属性的定义以及子属性对属性特征继承的解释,我假设将非对称属性声明为对称属性的子属性将导致推理者检测到的不一致性(HermiT 1.3.8.413),但Protégé5.2.0的情况并非如此。对此有何解释? HermiT从下面的断言中正确推断出的范围为和,并在时检测到不一致。Protégé5.2.0中的Pellet和Fact 1.6.5也是如此。 这段代码似乎是文本的一种