Проблемы в спящем режиме CascadeType - PullRequest
1 голос
/ 30 ноября 2011

У меня есть два объекта управления данными и объединяю таблицу между ними следующим образом:

@SuppressWarnings("serial")
@Entity
@Table(name = "employee")
public class Employee implements Serializable {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.employee")
    @Cascade(value = { org.hibernate.annotations.CascadeType.ALL,
            org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
    @Fetch(FetchMode.SELECT)
    private Set<EmployeeGroup> employeeGroups = new HashSet<EmployeeGroup>();
}

и

@SuppressWarnings("serial")
@Entity
@Table(name = "messaginggroup", uniqueConstraints = { @UniqueConstraint(columnNames = "group_name") })
public class MessagingGroup implements Serializable {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.messaginggroup")
    @Cascade(value = { org.hibernate.annotations.CascadeType.ALL,
            org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
    @Fetch(FetchMode.SELECT)
    private Set<EmployeeGroup> employeeGroups = new HashSet<EmployeeGroup>();
}

и

@SuppressWarnings("serial")
@Entity
@Table(name = "employee_group")
@AssociationOverrides(value = {
        @AssociationOverride(name = "pk.messaginggroup", joinColumns = @JoinColumn(referencedColumnName = "group_id")),
        @AssociationOverride(name = "pk.employee", joinColumns = @JoinColumn(referencedColumnName = "employee_id")) })
public class EmployeeGroup implements Serializable {

    @EmbeddedId
    private EmployeeGroupId pk = new EmployeeGroupId();
}

при добавлении и удалении с помощью моегоприсоединиться к таблице я использую

public void updateMsgGroup() {
        try {
            log.debug("### Updating Messaging Group ##### ");
            MessagingGroup msgGroup = msgGroupServ.getMsgGroupByID(Long
                    .parseLong(selectedmsgGroup));
            msgGroup.setGroupName(this.catchedGroupName);

            Set<EmployeeGroup> mySet = msgGroup.getEmployeeGroups();
            for (EmployeeGroup mepGrop : mySet) {
                msgGroupServ.deleteEmpMsgGroup(mepGrop);
            }

            // msgGroup.getEmployeeGroups().clear();
            Set<EmployeeGroup> amySet = new HashSet<EmployeeGroup>();
            for (Employee newEmp : this.currentRelatedEmp) {
                EmployeeGroup empGrp = new EmployeeGroup();
                empGrp.setEmployee(newEmp);
                empGrp.setMessageGroup(msgGroup);
                empGrp.setJoinType(true);
                msgGroup.getEmployeeGroups().add(empGrp);
                amySet.add(empGrp);
                // empGroupsList.add(empGrp);
            }
            log.debug(" $$$$ Set Size $$$$     " + mySet.size());
            // msgGroup.setEmployeeGroups(mySet);
            msgGroupServ.updateMsgGroup(msgGroup);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

почему установка CascadeType на CascadeType.REMOVE я могу удалить, но добавление не работает, а при установке на CascadeType.All я могу добавить, но не могу удалить из db

Так есть идеи, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 04 марта 2012

Попробуйте это:

 @Cascade(value = { org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE
        org.hibernate.annotations.CascadeType.DELETE_ORPHAN })

SAVE_UPDATE = каскад для добавления и обновления элементов;ALL = только каскадное добавление, тогда вы также должны определить DELETE

ссылка: javadoc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...