【发布时间】:2015-10-11 09:16:30
【问题描述】:
嗨,我是休眠新手。
我有一个 java web 项目,我在这个项目中使用 spring mvc 和 hibernate,对于数据库,我使用我的 sql。
我面临的问题是:我在 db 中有一个表作为用户,在 java 项目中作为 user.java,我有 2 个其他表引用和 messgaes。在 java 项目中,我有 referenceances.java 和 Messages.java 和我已将映射表创建为 user_referances_mapping(user_id, reference_id) 和 user_messages_mapping(user_id, reference_id)。
并且我在用户和引用表以及用户和消息表之间存在一对多的关系。
当我获取用户数据时,我想同时从references 和messgaes 表中获取数据。
当我使用 "FROM User u LEFT JOIN FETCH u.references WHERE u.contactNo=:contactNo or u.email=:email" 我获取参考表数据。
那么任何人都可以帮助我获得解决方案,我如何同时获取引用表和消息表的数据以及应该如何解决它。
user表中references表和messages表的映射:
@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;
}
【问题讨论】:
标签: java mysql spring hibernate spring-mvc