Java中的Hibernate映射

Java中的Hibernate映射,java,hibernate,jakarta-ee,nhibernate-mapping,Java,Hibernate,Jakarta Ee,Nhibernate Mapping,我有两张桌子 街上有 而Path已经 还有一张桌子 街道小径 现在我想在这些表之间创建一个关系,这样当从街道上删除任何记录时,街道路径上的记录也会被删除,但它们不能有直接的关系。只有街道和路径才能有直接关系,路径中的记录应保持完整 在hibernate中怎么做 PS:我使用的是xml,而不是hibernate映射的注释。您可以使用CriteriaAPI。实际上,你不需要任何关系,你只需要街道id,你已经拥有了它。你可以试试这个 public void removeStreet(Street st

我有两张桌子

街上有

而Path已经

还有一张桌子

街道小径

现在我想在这些表之间创建一个关系,这样当从街道上删除任何记录时,街道路径上的记录也会被删除,但它们不能有直接的关系。只有街道和路径才能有直接关系,路径中的记录应保持完整

在hibernate中怎么做


PS:我使用的是xml,而不是hibernate映射的注释。

您可以使用CriteriaAPI。实际上,你不需要任何关系,你只需要街道id,你已经拥有了它。你可以试试这个

public void removeStreet(Street street) //this reference is an instance 
{                                       //of Street entity that you want to remove
   session.clear();
   session.delete(street);
   session.flush();

   StreetPath streetPath = new StreetPath(); //create new instance of StreetPath entity
   streetPath.setStreetId(street.getId());   //with id of deleted row of Street table  

   session.clear();
   session.delete(streetPath);
   session.flush();
}

我希望这会有所帮助。

您可以使用本教程:

您知道如何做到这一点吗?我尝试过,并创建了直接关系,但不知道如何做到前面提到的事情,这就是我为什么在这里提问的原因。我想您应该尝试一下,如果代码(映射、访问等)不起作用,您应该重新编写代码。如何,如果你能举个例子吗?@Sobia我试着举个例子。你必须先创建一个会话,我想你已经有了。顺便说一句,这个过程不需要使用路径实体。你提到的这个方法我已经知道了。。。但我想做的正是我在我的查询中发布的“当任何记录从街道上删除时,街道路径上的记录也将“自动”删除,路径中的记录应该保持完整”。。。要做到这一点,我不需要单独查询StreetPath。@Sobia也许这个链接有帮助。这并不是一个真正的答案。因为当从街道上删除任何记录时,街道路径上的记录也将被删除,您应该在XMLI中使用
cascade
属性,我还没有尝试过,但在hibernate教程中的任何地方都可以写下这篇文章,您可以尝试一下,它
SQL
,解决您的问题,也使用
cascade
。我不需要尝试这一点。实际上,您建议使用1:m,而关系显然是m:n,然后建议使用您在某处听说的东西。。
 "path_id", "pathDescription", "path_name"
  "path_id", "Street_id"
public void removeStreet(Street street) //this reference is an instance 
{                                       //of Street entity that you want to remove
   session.clear();
   session.delete(street);
   session.flush();

   StreetPath streetPath = new StreetPath(); //create new instance of StreetPath entity
   streetPath.setStreetId(street.getId());   //with id of deleted row of Street table  

   session.clear();
   session.delete(streetPath);
   session.flush();
}