如何告诉 Hibernate 标准跳过深层次的关系?
How to tell Hibernate criteria to skip relations in deep level?
我有休眠实体 GeUser
这个实体与 Pick
实体有多对多关系,这个实体与 ALgo
实体有一对一关系,这个实体与 [=17= 有多对多关系] 实体。我的目标是获得 GeUser 实体但没有 picks.algo.matches
。我想在我的网络应用程序上使用 GeUser 对象,但对我来说不需要有关算法匹配的数据,所以我想在从数据库加载之前跳过它。
GeUser 实体:
...
@Entity
public class GeUser {
....
@ManyToMany
private List<Pick> picks = new ArrayList<Pick>(0);
...
选择实体:
@Entity
public class Pick {
...
@OneToOne
private Algo algo;
...
算法实体:
...
@Entity
public class Algo{
...
// I want to skip this when GeUser entity is loading from db. Should be e.g. matches == null
@ManyToMany
protected List<DbMatch> matches = new ArrayList<DbMatch>();
...
GeUser 道方法:
public GeUser getUser(int user_id) {
Criteria criteria = session.createCriteria(GeUser.class);
criteria.add(Restrictions.eq("user_id",user_id));
List<GeUser> users = criteria.list();
if (users.size() > 0) {
return users.get(0);
} else {
return null;
}
}
这是一个简单的情况,可以借助延迟加载来解决。您可以在 Algo
中指定 FetchType.LAZY
matches
。 matches
仅当您在活动会话中访问它时才会加载。
...
@Entity
public class Algo{
...
// I want to skip this when GeUser entity is loading from db. Should be e.g. matches == null
@ManyToMany(fetch = FetchType.LAZY )
protected List<DbMatch> matches = new ArrayList<DbMatch>();
...
有关延迟加载的更多详细信息,请按照以下教程进行操作:
- Whosebug thread - Lazy loading
- Lazy loading in hibernate
- Lazy and Eager loading
希望对您有所帮助,如果您需要更多帮助,请随时发表评论!
我有休眠实体 GeUser
这个实体与 Pick
实体有多对多关系,这个实体与 ALgo
实体有一对一关系,这个实体与 [=17= 有多对多关系] 实体。我的目标是获得 GeUser 实体但没有 picks.algo.matches
。我想在我的网络应用程序上使用 GeUser 对象,但对我来说不需要有关算法匹配的数据,所以我想在从数据库加载之前跳过它。
GeUser 实体:
...
@Entity
public class GeUser {
....
@ManyToMany
private List<Pick> picks = new ArrayList<Pick>(0);
...
选择实体:
@Entity
public class Pick {
...
@OneToOne
private Algo algo;
...
算法实体:
...
@Entity
public class Algo{
...
// I want to skip this when GeUser entity is loading from db. Should be e.g. matches == null
@ManyToMany
protected List<DbMatch> matches = new ArrayList<DbMatch>();
...
GeUser 道方法:
public GeUser getUser(int user_id) {
Criteria criteria = session.createCriteria(GeUser.class);
criteria.add(Restrictions.eq("user_id",user_id));
List<GeUser> users = criteria.list();
if (users.size() > 0) {
return users.get(0);
} else {
return null;
}
}
这是一个简单的情况,可以借助延迟加载来解决。您可以在 Algo
中指定 FetchType.LAZY
matches
。 matches
仅当您在活动会话中访问它时才会加载。
...
@Entity
public class Algo{
...
// I want to skip this when GeUser entity is loading from db. Should be e.g. matches == null
@ManyToMany(fetch = FetchType.LAZY )
protected List<DbMatch> matches = new ArrayList<DbMatch>();
...
有关延迟加载的更多详细信息,请按照以下教程进行操作:
- Whosebug thread - Lazy loading
- Lazy loading in hibernate
- Lazy and Eager loading
希望对您有所帮助,如果您需要更多帮助,请随时发表评论!