JPA包名称/结构 - 重要

时间:2018-02-02 16:43:24

标签: java jpa orm entitymanager


我在一个名为com.dto.testkk的包中有一个Comm类。我有一个名为com.dto.needsWork的包中的另一个类Cntc。其中每个都映射到数据库中的相应表,其中Comm包含Cntc_id作为其外键。

我面临的问题是,如果我将Comm重构为com.dto包,那么由于某种原因,表中的删除(使用EntityMgr:remove)不再有效。我一直收到“No Data Found”错误。创建和更新工作完美。除包名外没有其他任何改变。我已经更新了ORM.xml文件以及包含这些ORM文件映射的persistence.xml文件。

如果我将Comm重构为按字母顺序排在needsWork之前的任何软件包,就会出现此问题!如果我重构(比如)com.dto.omg它可以工作,但如果它是com.dto.mgo

我不知道为什么会这样。任何见解都非常感激。

更新:我有这个工作,但仍然不明白潜在的问题。 我做了如下:

原始代码:

private void delete(){
contacts.forEach(
contact ->
{
   JpaHelper.execResultListQuery(
   em,
   ALL_COMMS_BY_CONTACT_QUERY,
   Comm.class,
   contact.getId()).forEach(em::remove);

   em.remove(contact);

});
em.flush();
}

上述代码在提到的原始软件包(Comk in testkk和Cntc in needsWork)中有效。使用更改的包结构,在em.flush()中抛出了异常,但未找到数据。我认为由于某种原因,联通在Comm之前被冲洗了,因此这种情况正在发生。虽然我不知道为什么。

更改代码以使其立即生效:

private void delete(){
contacts.forEach(
contact ->
{
   JpaHelper.execResultListQuery(
   em,
   ALL_COMMS_BY_CONTACT_QUERY,
   Comm.class,
   contact.getId()).forEach(em::remove);
   em.flush();
   em.remove(contact);
   em.flush();
});
}

谢谢 KARTHIK

0 个答案:

没有答案