如何删除hibernate中一对多关系的记录

时间:2014-07-02 06:30:25

标签: hibernate hql hibernate-mapping

我有两个表,一个是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();

但我在执行此查询时遇到异常。 那么有谁能告诉我它有什么问题。?

1 个答案:

答案 0 :(得分:1)

引自the documentation

  

可以在批量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