您好我是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;
}
答案 0 :(得分:0)
使用 @LazyCollection(LazyCollectionOption.FALSE)
在消息的User类中使用relationship条目。