java - hibernate CascadeType中的问题

标签 java hibernate jpa orm

我有两个实体 bean 和它们之间的连接表,如下

@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 时 我可以添加但无法从数据库中删除

那么我知道如何解决这个问题吗?

最佳答案

试试这个:

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

SAVE_UPDATE = 用于添加和更新元素的级联; ALL = 仅级联添加 那么你也必须定义 DELETE

引用:javadoc

关于java - hibernate CascadeType中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8329379/

相关文章:

java - 删除 switch 语句中的编辑

java - Hibernate 查询等效 sql

java - @ManyToMany 关系上的 JOIN FETCH 会产生 N + 1 个查询

java - 如何强制 Hibernate-Envers 在字段名称周围使用引号?

java - 填充实体后为空下拉列表

java - 在 Spring JPA 中关联嵌套对象 ID

java - 将blob文件保存到mysql数据库中

Java,与对象无关的 null 返回

java - 如何将 JFileChooser 放置在特定父窗口/框架的顶部

jpa - 使外键在 JPA 中唯一