您好我是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;;
答案 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";