没有使用hibernate从映射表中获取数据

时间:2015-09-18 18:19:45

标签: java mysql sql-server spring hibernate

您好我是hibernate的新手。

我有一个java web项目,我在这个项目中使用带有hibernate的spring mvc,而对于数据库,我正在使用我的sql。

我面临的问题是: 我在db中有一个表作为用户,在java项目中有一个表作为user.java 我有另一个表引用,在java项目中我有referances.java 我已经创建了一个映射表user_referances_mapping(user_id,referance_id)。

我和user和referances表之间有一对多的关系。

现在,当我尝试获取用户数据时,它为我提供了用户表coloumns数据,但没有提供referances数据,只返回referances表的空列表。

另一方面,我也有类似的映射表,其中包含像role这样的用户表,只有一对多映射的地址,并且从这些表中检索数据。

所以任何人都可以帮助我获得解决方案,这就是为什么我没有使用一对多的关系来获取referances表的数据,以及它应该是什么解决方案。

在用户表中映射referances表:

@OneToMany
@Basic(optional = true)
@BatchSize(size = 5)
@Cascade(CascadeType.ALL)
@Cache(region = IAppConstants.CACHE_REFERANCES, usage = CacheConcurrencyStrategy.READ_WRITE)
@JoinTable(name = "user_referances_mapping", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "referance_id") })
private List<Referances> referances = new ArrayList<Referances>();

public List<Referances> getReferances() {
    return referances;
}

public void setReferances(List<Referances> referances) {
    this.referances = referances;
}

UserDao类功能:

public User getC2SUserByContactNoOrEmail(final String value) throws ApplicationException {
    try{
    @SuppressWarnings("unchecked")
    Query query = currentSession().createQuery(
            IQueryConstants.FETCH_USER_BY_CONTACTNO_OR_EMAIL);
    query.setParameter("contactNo", value);
    query.setParameter("email", value);
    return (User) query.uniqueResult();
    }catch(Exception e){
        throw new ApplicationException(
                "Issue occurred while fetching user by: " + value, e);
    }
    //return null;
}

FETCH_USER_BY_CONTACTNO_OR_EMAIL =&#34; FROM User WHERE contactNo =:contactNo或email =:email&#34;;

1 个答案:

答案 0 :(得分:0)

如果我没错,OneToMany关系定义为&#34;懒惰&#34;默认情况下,这意味着您需要明确声明要获取相关记录。

尝试像这样修改查询:

FETCH_USER_BY_CONTACTNO_OR_EMAIL = "FROM User u LEFT JOIN FETCH u.referances WHERE u.contactNo=:contactNo or u.email=:email";