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

Hibernate-OGM mongodb,不能删除实体-分离

章学义
2023-03-14

因此,我试图将Hibernate OGM(4.1.0.beta4)与MongoDB一起使用,现在我遇到了一个让我困惑的问题,所以我得到了一个我创建的实体列表,然后我尝试遍历该列表并删除每个实体-然而,当我尝试得到以下异常“删除一个分离的实例”时,我假设我错过了持久性设置中的一些东西。

@Path("/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@RequestScoped
public class TestService {

@Inject
    private TestRepository testRepo;

    @GET
    @Path("/deleteallplease")
    public String deleteAllTests(){

        for( TestEntity rp : testRepo.findAll() ){
            testRepo.delete( rp );
        }

        return "done done done";
    }


}
@Stateless
@LocalBean
public class TestRepository {

@Inject
private EntityManager em;

@Inject 
private Logger log;

public List<TestEntity> findAll() {
    return em.createQuery("FROM TestEntity", TestEntity.class).getResultList();
}
<persistence version="2.0"
         xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="
    http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="primary" >
    <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
    <class>com.test.TestEntity</class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.ogm.datastore.provider" value="mongodb"/>
        <property name="hibernate.ogm.datastore.database" value="db"/>
        <property name="hibernate.ogm.datastore.host" value="127.0.0.1"/>
        <property name="hibernate.ogm.datastore.port" value="59541"/>
        <property name="hibernate.ogm.datastore.username" value="user"/>
        <property name="hibernate.ogm.datastore.password" value="password"/>
        <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
    </properties>
</persistence-unit>

</persistence>

我想我最困惑的事情是用deleteAllTests()获得实体列表,然后试图删除它们,但它们已经分离了?所以我显然也错过了一些基本的东西,我怀疑它的mongo-ogm和JTA玩得不好,因为mongo不是事务性的,但我认为ogm会为我抽象出来。

共有1个答案

阙辰龙
2023-03-14

没有看到delete()方法,但我认为您正在使用em.remove()删除一个实体。

可以尝试使用em.remove(em.merge(实体))进行删除。

 类似资料:
  • 问题内容: 我有两个分别以双向一对多关系存在的实体类 A 和 B。 A.java: B.java 在一个简单的控制台应用程序中,我从数据库中获取了特定的 A 行,并尝试删除其详细信息 B 行(随机),但是 JPA / Hibernate* 不仅删除了该行-甚至没有向该行发出任何 DELETE 语句。数据库。删除 B 行的唯一方法是从 A.java 的集合( LinkedHashSet )中删除相应

  • 删除父实体时,我还想删除关联的子实体(从数据库中)。我试图在删除时使用级联,如下所示,但我一定做错了什么。 当对父实体对象调用删除时,我收到错误消息:“该实体仍在数据库的其他地方引用”。我可以确认该实体在数据库的其他地方引用的唯一地方是在下面的两个表中(如果我手动从数据库中删除子行,对父实体对象的删除调用工作正常)。在过去的9个小时里,我一直在阅读实体对象并尝试不同的东西。我做错了什么? 这是我的

  • 问题内容: 我有以下通常正常工作的代码: 对于我的许多实体类来说,这都是可行的。但是对于其中的两个它什么也不做,它不会引发任何异常,也不会删除该对象。来自hibernate的日志显示,hibernate执行了许多选择查询,但它甚至没有尝试执行删除。 我已经在这里和这里尝试了在其他类似问题中发现的建议,但是没有用(嗯,后者建议我不能使用,但是我只是在和之间加上了语句)。 我似乎找不到这两个类比其他类

  • 我有以下通常运行良好的代码: 对于我的许多实体类,这很有效。但是,对于其中两个,它什么都不做,它不会引发任何异常,也不会删除对象。来自Hibernate的日志显示Hibernate执行了许多选择查询,但它甚至不会尝试执行删除。 我已经尝试了在这里和这里的其他类似问题中找到的建议,但无济于事(好吧,后者建议我不能使用,但我只是将语句括在和之间)。 我似乎找不到这两个班比其他班多(或少)什么。他们使用

  • 我目前正在努力删除一个实体,它涉及到各种关系(只有< code > @ ManyToOne )——然而,Hibernate不删除任何东西——在调用< code>em.remove之后,一切都保持不变。 我有5个实体(< code>E1 - E5),引用问题中的实体(< code>E6)如下: 本身有相反的关系: (省略了id、附加列等...) 每当我调用< code > em . remove(i

  • 我的实体。ValidationStep与documentDetail有一对一的关系,documentDetail与documentValidations有一个完全的关系 我的删除查询 父ValidationStep被删除,但是docDetail和documentValidations仍然在数据库中。