deleted object would be re-saved by cascade (remove deleted object from associations)

后端 未结 18 1163
轮回少年
轮回少年 2020-11-30 00:19

i have the following two entities:

1- PlayList:

@OneToMany(fetch = FetchType.EAGER, mappedBy = \"playlist\", orphanRemoval = true, c         


        
18条回答
  •  暖寄归人
    2020-11-30 00:47

    Had the same error. Removing the object from the model did the trick.

    Code which shows the mistake:

    void update() {
        VBox vBox = mHboxEventSelection.getVboxSelectionRows();
    
        Session session = HibernateUtilEventsCreate.getSessionFactory().openSession();
        session.beginTransaction();
    
        HashMap existingEventLinks = new HashMap<>();
        for (EventLink eventLink : mEventProperty.getEventLinks()) {
            existingEventLinks.put(eventLink.getEvent().getName(), eventLink);
        }
    
        mEventProperty.setName(getName());
    
        for (Node node : vBox.getChildren()) {
    
            if (node instanceof HBox) {
                JFXComboBox comboBoxEvents = (JFXComboBox) ((HBox) node).getChildren().get(0);
                if (comboBoxEvents.getSelectionModel().getSelectedIndex() == -1) {
                    Log.w(TAG, "update: Invalid eventEntity collection");
                }
    
                EventEntity eventEntity = comboBoxEvents.getSelectionModel().getSelectedItem();
                Log.v(TAG, "update(" + mCostType + "): event-id=" + eventEntity.getId() + " - " + eventEntity.getName());
    
                String split = ((JFXTextField) (((HBox) node).getChildren().get(1))).getText();
                if (split.isEmpty()) {
                    split = "0";
                }
                if (existingEventLinks.containsKey(eventEntity.getName())) {
                    // event-link did exist
                    EventLink eventLink = existingEventLinks.get(eventEntity.getName());
                    eventLink.setSplit(Integer.parseInt(split));
                    session.update(eventLink);
                    existingEventLinks.remove(eventEntity.getName(), eventLink);
                } else {
                    // event-link is a new one, so create!
                    EventLink link1 = new EventLink();
    
                    link1.setProperty(mEventProperty);
                    link1.setEvent(eventEntity);
                    link1.setCreationTime(new Date(System.currentTimeMillis()));
                    link1.setSplit(Integer.parseInt(split));
    
                    eventEntity.getEventLinks().add(link1);
                    session.saveOrUpdate(eventEntity);
                }
    
            }
        }
    
        for (Map.Entry entry : existingEventLinks.entrySet()) {
            Log.i(TAG, "update: will delete link=" + entry.getKey());
            EventLink val = entry.getValue();
            mEventProperty.getEventLinks().remove(val); // <- remove from model
            session.delete(val);
        }
    
        session.saveOrUpdate(mEventProperty);
    
        session.getTransaction().commit();
        session.close();
    }
    

提交回复
热议问题