hibernate可重复使用的延迟加载

时间:2017-05-12 16:32:50

标签: java hibernate lazy-loading

以下是我UserRepository课程中的一些方法:

// Get a user with all his roles
getWithRoles(Long userId);

// Get a user with all his posts
getWithPosts(Long userId);

// Get a user with all his activities
getWithActivities(Long userId);

// Get a user with all his relations
getWithAllRelations(Long userId);

这些方法都有类似下面的内容来确定要加载的关系:

// An example for getWithRoles(Long userId);
criteria.setFetchMode("roles", FetchMode.JOIN);

我尽力不在这些方法之间重复代码,但仍难以维持IMO。

有没有办法避免这种情况并最终得到像波纹管这样的东西?

userRepo.findOne(userId)
        .withRelation(User_.roles)
        .withRelation(User_.posts);

userRepo.findOne(userId)
        .withRelation(User_.roles)
        .withRelation(User_.activities);

userRepo.findOne(userId)
        .withAllRelations();

我基本上都在寻找一种方法来重用关系提取器方法,而不是仅为此重写一个全新的方法。

PS:在上面的示例中,User_JPA Static Metamodel

1 个答案:

答案 0 :(得分:0)

我想我刚刚发现了在存储库中实现它的想法。

我只需要将属性列表作为第二个参数传递。

get(Long userId, List<String> relations);

甚至更好

get(Long userId, List<Attribute> relations);

这个的实现将遍历关系参数,并逐个获取它们。

困难的部分是我必须处理嵌套关系。