【问题标题】:not getting data from the mapping table using hibernate没有使用休眠从映射表中获取数据
【发布时间】:2015-09-18 18:19:44
【问题描述】:

嗨,我是休眠新手。

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

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

我在用户和引用表之间有一对多的关系。

现在,当我尝试获取用户数据时,它会提供用户表列数据,但不提供参考数据,并且仅返回参考表的空列表。

另一方面,我也有类似的映射表,其中包含类似角色的用户表、仅具有一对多映射的地址,并且从这些表中检索数据。

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

用户表中引用表的映射:

@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 = "来自用户 WHERE contactNo=:contactNo or email=:email";

【问题讨论】:

  • 请分享您实际查询的代码。
  • 我已经编辑了帖子,请查看它的实际查询功能

标签: java mysql sql-server spring hibernate


【解决方案1】:

如果我是对的,OneToMany 关系默认定义为“惰性”,这意味着您需要明确声明要获取相关记录。

尝试像这样修改查询:

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

【讨论】:

  • 不,这行不通,在这行代码返回 (User) query.uniqueResult();它给出了 ApplicationException
  • 内部异常是什么?请发布完整的堆栈跟踪。
  • 该错误是由其他原因引起的。你的回答奏效了。非常感谢
  • 如果我必须从 2 个或更多表中获取结果而不仅仅是 u.references,该怎么办?
猜你喜欢
  • 1970-01-01
  • 2016-07-24
  • 2018-01-15
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
相关资源
最近更新 更多