Java EntityManager remove()调用不更新数据库

Java EntityManager remove()调用不更新数据库,java,hibernate,jpa,persistence,entity,Java,Hibernate,Jpa,Persistence,Entity,我有一个使用JPA的基本Java项目设置。我有正确注释的类,可以将数据插入到我的PostgreSQL数据库中,没有任何问题 我的问题。。。我可能会发现我需要在这里添加更多细节 我称之为“em.remove(myObject)”,其中“em”是一个实体管理器。我可以在调试时看到对对象的更改,但在应用程序完成后,我的更改不会反映在数据库中 对.remove()的调用是否会更新数据库,还是还需要添加一个.flush()调用?我试过用谷歌搜索这个,一定是遗漏了什么 谢谢 我发现我还需要定义级联类型 @M

我有一个使用JPA的基本Java项目设置。我有正确注释的类,可以将数据插入到我的PostgreSQL数据库中,没有任何问题

我的问题。。。我可能会发现我需要在这里添加更多细节

我称之为“em.remove(myObject)”,其中“em”是一个实体管理器。我可以在调试时看到对对象的更改,但在应用程序完成后,我的更改不会反映在数据库中

对.remove()的调用是否会更新数据库,还是还需要添加一个.flush()调用?我试过用谷歌搜索这个,一定是遗漏了什么


谢谢

我发现我还需要定义级联类型

@ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "QUESTION_ID", nullable = false)
    private Question question; 

remove
调用应该从数据库中删除实体。但是,这可能不会立即发生,具体取决于缓存设置。如果删除操作违反了某些约束,那么当它尝试更新数据库时,它将抛出异常,删除操作将失败。如果您确实需要保证它立即发生或失败,那么是的,您需要调用
flush

在删除对象之前是否从同一事务中的数据库中读取该对象?是的,它是同一事务的一部分。如果它不是分离实例,则删除调用应该可以工作。如果它已分离,则需要首先使用
objectmanaged=em.merge(myObject)对其进行管理
然后在
managed
上调用remove。谢谢。我来试一试。如果你是在一个事务中这样做的,你是否在最后提交了该事务?如果你希望删除也删除关联的问题对象,你应该只添加级联。cascade.REMOVE意味着myObject上的REMOVE也将在问题对象上执行