2013-05-04 68 views
2

我有一个使用JPA的基本Java项目设置。我有正确注释的类,可以毫无困难地将数据插入到PostgreSQL数据库中。EntityManager remove()调用不更新数据库

我的问题......我会发现我需要在这里加入更多详情...

那是我打电话“em.remove(myObject的)”,其中“时间”是一个EntityManager。我可以在调试时看到对象的更改,但在完成应用程序后,我的更改未反映在数据库中。

调用.remove()更新数据库还是我还需要添加.flush()调用?我试着用谷歌搜索这个,一定是错过了一些东西。

谢谢!

+0

在删除它之前,您是否在同一个事务中从数据库中读取对象? – clav 2013-05-04 04:06:52

+0

是的,它是同一交易的一部分。 – 2013-05-04 04:09:38

+2

如果它不是分离的实例,那么删除调用应该可以工作。如果它被分离了,你需要先使用Object managed = em.merge(myObject);来进行管理,然后在managed上调用remove。 – clav 2013-05-04 04:12:35

回答

0

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

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

如果您希望删除相关的Question对象,则只应添加级联。 cascade.REMOVE意味着myObject上的remove也会在Question对象上执行 – 2013-05-20 04:28:51

0

remove调用应该从数据库中删除该实体。但是,根据您的缓存设置,这可能不会立即发生。如果你有一些将被删除违反的约束,那么当它尝试更新数据库时,它会抛出异常,并且删除将失败。如果您确实需要确保它立即发生或失败,那么是的,您需要致电flush