如何删除hibernate一对多关系中的记录
我有两个表,一个是QuickLinks,另一个是OrgUnit。OrgUnit表是父表,QuickLinks表是子表。我在QuickLinks表中添加了多对一的关系如何删除hibernate一对多关系中的记录,hibernate,hql,hibernate-mapping,Hibernate,Hql,Hibernate Mapping,我有两个表,一个是QuickLinks,另一个是OrgUnit。OrgUnit表是父表,QuickLinks表是子表。我在QuickLinks表中添加了多对一的关系 @Entity @Table(name ="TBL_STD_QUICK_LINKS") public class QuickLinks { @Id @GeneratedValue @Column(name = "FLD_QUICK_LINK_ID") private Long quickLinkId;
@Entity
@Table(name ="TBL_STD_QUICK_LINKS")
public class QuickLinks {
@Id
@GeneratedValue
@Column(name = "FLD_QUICK_LINK_ID")
private Long quickLinkId;
@Column(name = "FLD_DISPLAY_NAME")
private String displayName;
@ManyToOne
private OrgUnit orgUnit;
}
@Entity
@Table(name = "TBL_STD_ORG_UNIT")
public class OrgUnit implements Serializable {
@Id
@GeneratedValue
@Column(name = "FLD_ORGUNIT_ID")
private Long orgUnitId;
@Column(name = "FLD_OUNAME")
private String ouName;
@Column(name = "FLD_OUPARENT_ID")
private Long ouParentId;
@Column(name = "FLD_OUPATH")
private String ouPath;
}
我想删除记录QuickLinks表,从OrgUnit的输出路径以“/abc/xyz”开头
Query executeQuery = getSession().createQuery("delete from QuickLinks as links where links.orgUnit.ouPath like :OrgName");
executeQuery.setParameter("OrgName", ouPath+"%");
executeQuery.executeUpdate();
但我在执行此查询时遇到异常。
有谁能告诉我这里面有什么不对吗?引用自:
在批量HQL查询中不能指定任何形式的连接语法(隐式或显式)。子查询可以在where子句中使用,其中子查询本身可能包含联接
是隐式内部联接,因此不可接受
您可以使用本机(SQL)查询。或者,根据文档提示,您可以使用子查询:
delete from QuickLinks as link where link.id in
(select link2.id from QuickLinks link2
where link2.orgUnit.ouPath like :orgName)
旁注:
QuickLinks
应命名为QuickLink
什么例外?张贴stacktrace。
delete from QuickLinks as link where link.id in
(select link2.id from QuickLinks link2
where link2.orgUnit.ouPath like :orgName)