Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 忽略Hibernate获取条件_Java_Hibernate_Fetching Strategy - Fatal编程技术网

Java 忽略Hibernate获取条件

Java 忽略Hibernate获取条件,java,hibernate,fetching-strategy,Java,Hibernate,Fetching Strategy,我有一些类User,它与LoginSession类有一对多的关系(我的User类中有一组LoginSessions) 我有这样的标准: Criteria crit = session.createCriteria(User.class); crit.setFetchMode("loginSession", FetchMode.JOIN); crit.createAlias("userLoginSession", "session"); crit.add(Restrictions.eq("sess

我有一些类User,它与LoginSession类有一对多的关系(我的User类中有一组LoginSessions)

我有这样的标准:

Criteria crit = session.createCriteria(User.class);
crit.setFetchMode("loginSession", FetchMode.JOIN);
crit.createAlias("userLoginSession", "session");
crit.add(Restrictions.eq("session.token", sessionToken));
crit.setMaxResults(1);
crit.setFirstResult(0);
crit.setFetchSize(1);
问题是,抓取总是懒惰的。我怎样才能使它变得急切(通过标准而不是通过属性注释)

注意:
如果我将
@Fetch
注释添加到
private Set userLoginSession
注释中设置的响应获取(我不希望它由标准
setFetchMode
自定义)

字段名称(setFetchMode方法的第一个参数)是否正确?

问题: 试试:

 Criteria crt = session.createCriteria(User.class);
 crt.setFetchMode("sessions", FetchMode.JOIN);
试着跟随

Criteria crit = session.createCriteria(User.class);
crit.setFetchMode("session.userId", FetchMode.EAGER);
User myThingy = (User)crit.uniqueResult();

尝试在别名上设置jointype:

Criteria crit = session.createCriteria(User.class);
crit.createAlias("userLoginSession", "session", Criteria.INNER_JOIN);
crit.add(Restrictions.eq("session.token", sessionToken));
crit.setMaxResults(1);
crit.setFirstResult(0);
crit.setFetchSize(1);
如上所述,您不能同时筛选和获取集合。您可以使用相关子查询解决此问题:

DetachedCriteria subquery = DetachedCriteria.For(User.class)
    .createAlias("userLoginSession", "session")
    .add(Restrictions.eq("session.token", sessionToken))
    .setFirstResult(0)
    .setMaxResults(1)     // assuming token is unique otherwise this won't restrict users but loginsessions
    .setProjection(Projections.id());

Criteria crit = session.createCriteria(User.class)
    .add(Subqueries.propertyIn("id", subquery)
    .setFetchMode("userLoginSession", FetchMode.JOIN);

注意:这是我头顶上的文本编辑器代码。方法名可能会有所不同

检查这个@Killer,我不知道它如何帮助meCriteria criteria=session.createCriteria(User.class);setFetchMode(“会话”,FetchMode.JOIN);List=criteria.List();根据我需要使用JOIN的文档,不推荐使用EAGER。好的,您是否得到意外的结果或某些异常。怎么了?你如何测试你的代码?setFetchingMethod什么都不做。这就是问题所在。我看到在获取用户时有一个查询(如代码中所示),在访问关系时有另一个查询。您是否使用注释进行映射?是的,您可以在问题中看到这是不推荐的:(什么是不推荐的?在稳定版本中,您可以使用createAlias(String associationPath、alias、joinType)(,java.lang.String,org.hibernate.sql.JoinType))我正在使用hibernate 4,eclipse指出它已被弃用。您能看看我作为字符串提供给setFetchingMethod的名称吗?
Criteria crit = session.createCriteria(User.class);
crit.createAlias("userLoginSession", "session", Criteria.INNER_JOIN);
crit.add(Restrictions.eq("session.token", sessionToken));
crit.setMaxResults(1);
crit.setFirstResult(0);
crit.setFetchSize(1);
DetachedCriteria subquery = DetachedCriteria.For(User.class)
    .createAlias("userLoginSession", "session")
    .add(Restrictions.eq("session.token", sessionToken))
    .setFirstResult(0)
    .setMaxResults(1)     // assuming token is unique otherwise this won't restrict users but loginsessions
    .setProjection(Projections.id());

Criteria crit = session.createCriteria(User.class)
    .add(Subqueries.propertyIn("id", subquery)
    .setFetchMode("userLoginSession", FetchMode.JOIN);