我在一个名为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