我有两个表,一个是QuickLinks,另一个是OrgUnit。 OrgUnit表是Parent和QuickLinks表是子表。我在QuickLinks表中添加了多对一的关系。
@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的FLD_OUPATH以'/ abc / xyz'开头。
Query executeQuery = getSession().createQuery("delete from QuickLinks as links where links.orgUnit.ouPath like :OrgName");
executeQuery.setParameter("OrgName", ouPath+"%");
executeQuery.executeUpdate();
但我在执行此查询时遇到异常。 那么有谁能告诉我它有什么问题。?
答案 0 :(得分:1)
可以在批量HQL查询中指定任何形式的连接语法(隐式或显式)。子查询可以在where子句中使用,子子查询本身可以包含连接。
links.orgUnit
是隐式内连接,因此不可接受。
您可以使用本机(SQL)查询。或者,正如文档提示的那样,您可以使用子查询:
delete from QuickLinks as link where link.id in
(select link2.id from QuickLinks link2
where link2.orgUnit.ouPath like :orgName)
附注:QuickLinks
应命名为QuickLink
。