如何使用Composite Key从Hibernate中删除

时间:2014-10-21 10:46:25

标签: java hibernate

我真的希望能够从具有复合主键的单个表中删除记录。这是我的复合键代码(省略了getters / setters):

@Embeddable
public class MISExceptionStoreUploadControlPK implements Serializable {
    /**
     * Serializable class - generated UID
     */
    private static final long serialVersionUID = -2589068978210044521L;

    @Column(name="STORE_NO", nullable=false)
    private String storeNo;

    @Column(name="EXTRACT_TIME", nullable=false)
    private String extractTime;

这是我的实体代码(省略了getters / setters):

@Entity
@Table(name="SDSUSER_OWNER.MIS_EXCEPTION_STORE_UPLD_CNTRL")
public class MISExceptionStoreUploadControl implements Serializable {
    /**
     * Serializable class - generated UID
     */
    private static final long serialVersionUID = 545018012527944915L;

    //@Id
    @EmbeddedId
    private MISExceptionStoreUploadControlPK misExceptionStoreUploadControlPK;

    @Column(name="UNDER_EXTRACT_DAYS", nullable=true)
    private Integer underExtractDays;

    @Column(name="UNDER_WEIGHT_RESERVE", nullable=false)
    private Integer underWeightReserve;

以下是尝试删除记录的代码:

// Retrieve session from Hibernate
        Session session = sessionFactory.getCurrentSession();

        MISExceptionStoreUploadControlPK recordToBeDeleted = (MISExceptionStoreUploadControlPK) session.load(MISExceptionStoreUploadControlPK.class, misExceptionStoreUploadControl.getMisExceptionStoreUploadControlPK());
        session.delete(recordToBeDeleted);

这是我得到的错误:嵌套异常是org.hibernate.MappingException:未知实体:com.classifieds.beans.volumetrics.MISExceptionStoreUploadControlPK

编辑'delete'代码以使用MISExceptionStoreUploadControl对象也不起作用。我收到一个错误,表示MISExceptionStoreUploadControlPK对象是预期的。

如果有帮助 - 我可以确认从表中所有记录的简单检索是有效的。

我很感激对此的一些建议......谢谢!

2 个答案:

答案 0 :(得分:1)

我没有直截了当地为你的答案提供解决方案,而是告诉你如何删除。

首先执行session.delete(object);触发一个查询(选择)以获取对象的持久状态,而不是删除查询以删除记录。

您可以通过以下方式删除记录。

  1. 使用Session.delete(对象); - 这将删除记录,但您需要构建对象
  2. 使用查询 - 这是我的选择,因为我可以使用“和”来获得尽可能多的条件

    Query query = session.createQuery("delete from TABLE where COL1 = :value");
    query.setParameter("value", 10);
    

答案 1 :(得分:0)

经过多次尝试,我得到了必须工作的代码。对于其他人来说,这是更正后的代码:

// Retrieve session from Hibernate
        Session session = sessionFactory.getCurrentSession();

        MISExceptionStoreUploadControl recordToBeDeleted = (MISExceptionStoreUploadControl) session.load(MISExceptionStoreUploadControl.class, misExceptionStoreUploadControlPK);
        session.delete(recordToBeDeleted);

希望它有用!