域实体类:自我引用关系映射,即域可以有多个子域@Entity
@Table(name = "itsc_domain_info")
public class ItscDomainInfo implements Serializable {    private static final long serialVersionUID = 1L;    public final static String PROPERTY_ORG_NAME = "domainName";    public final static String PROPERTY_PARENT_ORG = "parentDomain";
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "domain_id")
    private Integer domainId;    @Column(name = "domain_name")
    private String domainName;    @Column(name = "domain_type")
    private int domainType;    @Column(name = "domain_desc")
    private String domainDesc;    @ManyToOne
    @JoinColumn(name = "parent_domain", referencedColumnName = "domain_id")
    private ItscDomainInfo parentDomain;    @OneToMany(mappedBy = "parentDomain",  cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<ItscDomainInfo> childDomains;    public ItscDomainInfo() {
    }
......
}用户实体类:用户与域单向一对多映射@Entity
@Table(name = "itsc_user_info")
public class ItscUserInfo implements Serializable {    private static final long serialVersionUID = 1L;    public static final String PROPERTY_USER_NAME = "userName";    public static final String PROPERTY_USER_ROLEID = "roleInfo.roleId";    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "user_id")
    private Integer userId;    @Column(name = "user_name", updatable = false)
    private String userName;    @Column(name = "user_pwd")
    private String userPwd;    @Column(name = "user_telephone")
    private String userTelephone;    @Column(name = "user_position")
    private String userPosition;    @ManyToOne
    @JoinColumn(name = "user_domain", referencedColumnName = "domain_id")
    private ItscDomainInfo domainInfo;
.....
}测试数据:新建一个域A,再建两个子域B,C;创建一个用户a,让用户a所属的域为域A,即他的user_domain为域A的domain_id测试DAO接口,查询用户a,结果得到两个用户a,我想应该自我映射的问题,但是不知道该如何处理,哪位给诊断一下?

解决方案 »

  1.   

    我的查询接口实现:             DetachedCriteria detachedCriteria = DetachedCriteria.forClass(this.entityClass);
                // log.debug("this.objectClass:" + this.objectClass);
                detachedCriteria = detachedCriteria.add(Expression.eq(keyName, key));
                List<T> list = this.getHibernateTemplate().findByCriteria(
                        detachedCriteria);结果list出现两个实体