first of all,sorry about no test case supplying.i'll try my best to to give the issue i encoutered a complete clarity. similar code fragment comes following:
/**
* @author 作者 E-mail: kingviker@163.com
* @version 创建时间:Jun 6, 2016 4:04:21 PM
* 类说明
*/
public class test {
}
class A {
}
class B{
@ManyToOne(cascade = CascadeType.DETACH,fetch = FetchType.LAZY)
@JoinColumn(name="buse_businessid",updatable=false,insertable=false,nullable=true)
private Set<A> as;
....
public Set<A> getAs(){
if(!Hibernate.isInitialized(as)){
try{
Hibernate.initialize(as);
}catch(HibernateException e){
as = null;
}
}
return as;
}
}
class C{
@ManyToOne(cascade = CascadeType.DETACH,fetch = FetchType.LAZY)
@JoinColumn(name="xxxx",updatable=false,insertable=false,nullable=true)
@NotFound(action=NotFoundAction.IGNORE)
private Set<A> as;
...
getters and setters
...
}
as the code i post above, when i seach B by a hql like this:
I get a List<B> b_list,and the feild of B:as(Set<A>) is in a status of lazy loading.at present ,everything is fine. but in the same session, i request another hql like this:
before the sql is executed ,an exception is throwed out:org.hibernate.ObjectNotFoundException: No row with the given identifier exists: xxxx i am not sure whether the sql is executed the exception is throwed out ,but there's no sql sentences printing on console. 1:if i remove the @notfound annotation in C , or i add @NotFound in B's field:as; it'll work fine 2:both of the two sql sentences work fine in separate session. my analysis: 1.@NotFound will override load strategy to EAGER.while
and
both refer some same entities of A as annotated with@oneTomany.,i guess when
is executed ,it's eager to load it's field :set<A> as,but it is annotated with@notFound ,it should not throw out any exception if there are some entities of A not existing(it does have) ,but the truth is it did throw out Objectnotfoundexception. i guess when
is executed while some of Set<A> as in C are proxied in a lazy loading status in B; it will trigger to load Set<A> as in B?, if the trigger mechanism exists,it also should not throw out ObjectNotFoundException due to the code in getAs() of B. |