不使用hibernate从多个映射表中获取数据

时间:2015-10-11 09:16:30

标签: java mysql spring hibernate spring-mvc

您好我是hibernate的新手。

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

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

我在user和referances表以及用户和消息表之间有一对多的关系。

我想在获取用户数据时从两个引用和messgaes表中获取数据。

我正在使用的时候 “从用户u LEFT JOIN FETCH u.referances WHERE u.contactNo =:contactNo或u.email =:email”我得到参考表数据。

所以任何人都可以帮助我获得解决方案,我可以同时获取referances表和消息表的数据以及它应该是什么解决方案。

在用户表中映射referances表和messgaes表:

@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>();

@OneToMany
@Basic(optional = true)
@BatchSize(size = 5)
@Cascade(CascadeType.ALL)
@Cache(region = IAppConstants.CACHE_MESSAGES, usage = CacheConcurrencyStrategy.READ_WRITE)
@JoinTable(name = "user_messages_mapping", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "message_id") })
private List<Messages> messages = new ArrayList<Messages>();

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;

}

1 个答案:

答案 0 :(得分:0)

使用 @LazyCollection(LazyCollectionOption.FALSE)

在消息的User类中使用relationship条目。