使用开放JPA重新创建实体

时间:2011-08-10 07:45:16

标签: jpa

我面临一个非常基本的问题(据称......)。这是我所指的结构:

Structure

我在客户端使用flex,Java&在服务器端打开JPA和Microsoft SQL Server服务器持久层。

在我的应用程序中(在客户端),可以决定客户端是否

  1. 参与者
  2. 不建议。
  3. 假设我有'Joe'作为建议客户,现在我将Joe转换为'not recommended'(这是通过简单地取消检查nox来从客户端完成的。)

    在后端,我正在删除Joe的当前实体(作为建议客户端),将其id设置为null并再次创建为“not recommended client”。这样的事情:

    getAdviseeDao().delete(currentPersistedAdvisee);
    currentAdvisee.setId(null);
    getAdviseeDao().create(currentAdvisee);
    

    我一直在

    com.microsoft.sqlserver.jdbc.SQLServerException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_advised_to_clients". The conflict occurred in database "blablabla", table "dbo.participants", column 'id'.
    

    为什么会出现这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

getAdviseeDao().delete(currentPersistedAdvisee);
currentAdvisee.setId(null);
getAdviseeDao().create(currentAdvisee);

JPA就是这样。 不要将ID设置为null,也不要尝试将实体重新保存为其他内容。你会得到奇怪和意想不到的行为。

我认为你应该选择聚合而不是继承。我想我会将建议部分封装在一个Embeddable类中。