本帖最后由 gaoyangboy 于 2009-12-03 17:35:37 编辑

解决方案 »

  1.   

    com.keqisoft.model.Mapping#
    没有找到这个类,检查下路径对不
      

  2.   

    数据库里没有你要删除的记录。用过Hibernate的都知道,被删除的对象一定是持久态的,也就是说数据库一定要有的。JPA其实就是以Hibernate为基础的一种标准。
      

  3.   


    补充一下:
    楼主要删除的对象要么是数据库里没有的,要么是一个游离的(例如new出来的且id==null or ="")
      

  4.   

    我晕,之前的回复不知道按了什么都没有了!如果是游离态对象的话,可以使用 EntityManager#merge 使其成为受托管状态,这样就可以删除了。我一般都是使用 JPQL 语句:DELETE FROM User u WHERE u.id = :id 这样删除的。
      

  5.   


    建议先load一下(别用get),如果报错就跳过,否则删除。
      

  6.   

    先谢谢各位哥们
    我补充一下,我这个删除是级联删除,
    /**
     * user info
     * @author ygao
     *
     */
    @Entity
    @Table(name = "sysUserInfo")
    @NamedQueries( {
    @NamedQuery(name = "findALlSysUserInfo", query = "SELECT u From SysUserInfo u order by u.disseq"),
    @NamedQuery(name = "findSysUserInfo", query = "SELECT u FROM SysUserInfo u WHERE u.username=:username and u.password=:password and u.avaflag='0'"),
    @NamedQuery(name = "findSysUserInfoById", query = "SELECT u FROM SysUserInfo u WHERE u.userid=:userid"),
    @NamedQuery(name = "findSysUserInfoByUserName", query = "SELECT u FROM SysUserInfo u WHERE u.username=:username and u.avaflag='0'"),
    @NamedQuery(name = "findSysUserInfoByName", query = "SELECT u FROM SysUserInfo u WHERE u.username like :username")
    })
    @Replicable
    public class SysUserInfo implements Serializable{ private static final long serialVersionUID = -3811809093393098370L;

    /**
     * User ID
     */
    @Id
    @Column(name="userid")
    private String userid ;
    /**
     * Domain
     */
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="domainid", 
    referencedColumnName="domainId")
    private Domain domain = null;

    @OneToMany(mappedBy="sysUserInfo" ,fetch=FetchType.EAGER,cascade = {CascadeType.REMOVE})
    private Set<SysUserRoleOpp> sysUserRoleOpp;

    @OneToMany(mappedBy="sysUserInfo" ,fetch=FetchType.EAGER,cascade = {CascadeType.REMOVE})
    private Set<Mapping> mapping;

    public Set<Mapping> getMapping() {
    return mapping;
    }
    public void setMapping(Set<Mapping> mapping) {
    this.mapping = mapping;
    }
    /**
     * User Name
     */
    private String username ;
    /**
     * User Password
     */
    private String password ;
    /**
     * User RealName
     */
    private String realname ;
    /**
     * User Idecard
     */
    private String idecard ;
    /**
     * User Linkpho
     */
    private String linkpho ;
    /**
     * User AvaFlag
     */
    private String avaflag ;
    /**
     * ͳUser Disseq
     */
    private int disseq ;
    /**
     * User Re
     */
    private String re ;
    /**
     * User Moduserid
     */
    private String moduserid ;


    /**
     * @return the userid
     */
    public String getUserid() {
    return userid;
    }
    /**
     * @param userid the userid to set
     */
    public void setUserid(String userid) {
    this.userid = userid;
    }

    /**
     * @return the username
     */
    @Column(nullable = false)
    public String getUsername() {
    return username;
    } /**
     * @param username the username to set
     */
    public void setUsername(String username) {
    this.username = username;
    }
    /**
     * @return the password
     */

    public String getPassword() {
    return password;
    }
    /**
     * @param password the password to set
     */

    public void setPassword(String password) {
    this.password = password;
    }
    /**
     * @return the realname
     */
    @Column(nullable = false)
    public String getRealname() {
    return realname;
    } /**
     * @param realname the realname to set
     */
    public void setRealname(String realname) {
    this.realname = realname;
    }
    /**
     * @return the idecard
     */
    public String getIdecard() {
    return idecard;
    }
    /**
     * @param idecard the idecard to set
     */
    public void setIdecard(String idecard) {
    this.idecard = idecard;
    }
    /**
     * @return the linkpho
     */
    public String getLinkpho() {
    return linkpho;
    }
    /**
     * @param linkpho the linkpho to set
     */
    public void setLinkpho(String linkpho) {
    this.linkpho = linkpho;
    }
    /**
     * @return the avaflag
     */
    public String getAvaflag() {
    return avaflag;
    }
    /**
     * @param avaflag the avaflag to set
     */
    public void setAvaflag(String avaflag) {
    this.avaflag = avaflag;
    }
    /**
     * @return the disseq
     */
    public int getDisseq() {
    return disseq;
    }
    /**
     * @param disseq the disseq to set
     */
    public void setDisseq(int disseq) {
    this.disseq = disseq;
    }
    /**
     * @return the re
     */
    public String getRe() {
    return re;
    }
    /**
     * @param re the re to set
     */
    public void setRe(String re) {
    this.re = re;
    }
    /**
     * @return the moduserid
     */
    public String getModuserid() {
    return moduserid;
    }
    /**
     * @param moduserid the moduserid to set
     */
    public void setModuserid(String moduserid) {
    this.moduserid = moduserid;
    }
    public Domain getDomain() {
    return domain;
    }
    public void setDomain(Domain domain) {
    this.domain = domain;
    }
    public Set<SysUserRoleOpp> getSysUserRoleOpp() {
    return sysUserRoleOpp;
    }
    public void setSysUserRoleOpp(Set<SysUserRoleOpp> sysUserRoleOpp) {
    this.sysUserRoleOpp = sysUserRoleOpp;
    }}@Entity 
    @Table(name="mapping")
    @NamedQueries( {
    @NamedQuery(name = "findALlMapping", query = "SELECT c From Mapping c ")})
    @Replicable
    public class Mapping implements Serializable{
    private static final long serialVersionUID = -5050786782338035968L;

    /*
     * Host serviceid ,also inner id of HyperCloud service
     */
    @Id
    @Column(name="mappingId")
    private String mappingId;

    @ManyToOne()
    @JoinColumn(name="userid", 
    referencedColumnName="userid")
    private SysUserInfo sysUserInfo;

    @ManyToOne()
    @JoinColumn(name="vmid", 
    referencedColumnName="vmid")
    private  VirtualMachine virtualMachine;


    public SysUserInfo getSysUserInfo() {
    return sysUserInfo;
    } public void setSysUserInfo(SysUserInfo sysUserInfo) {
    this.sysUserInfo = sysUserInfo;
    } public VirtualMachine getVirtualMachine() {
    return virtualMachine;
    } public void setVirtualMachine(VirtualMachine virtualMachine) {
    this.virtualMachine = virtualMachine;
    } public String getMappingId() {
    return mappingId;
    } public void setMappingId(String mappingId) {
    this.mappingId = mappingId;
    }}
    配的是sysUserInfo对象 与 mapping对象一对多的关系。
    在删除sysUserInfo对象时,应该把mapping对象也一起删除。现在就出现了我说的这个错误 。
    问题还是没有解决,希望各位哥们再帮帮忙
      

  7.   

    Mapping不仅仅是与SysUserInfo发生关系,还有一个多对一的VirtualMachine,那么virtualMachine属性上的@ManyToOne()中应该配置上级联删除。
    另外还需到底层数据库管理系统中检查级联删除关系有没有配好(SQL Server中是将级联删除前面的勾勾上)。
    也可以分步来做,先解除SysUserInfo与Mapping的关系(先删除Mapping),再删除SysUserInfo。
      

  8.   


    好像不能在virtualMachine属性上配置级联删除,这样的话会删除我的VirtualMachine了。
    怎么样解除SysUserInfo与Mapping的关系啊。