1

在这里没有找到答案。我有 3 个对象(仅显示相关部分):

@Entity 
class Module {
} 

@Entity
class FeaturedModule {
    @OneToOne(optional = false)
    public Module playModule;

    public static final Finder<Long, FeaturedModule> FIND = new Finder<Long, FeaturedModule>(Long.class, FeaturedModule.class);
}

@Entity
class ModuleVersion {
    @ManyToOne
    public Module playModule

    public static final Finder<Long, ModuleVersion> FIND = new Finder<Long, ModuleVersion>(Long.class, ModuleVersion.class);
}

rels 是单向的,即 Module 没有引用其他 2 个实体。

问题:

  1. 如何使用 FeaturedModules 查找(来自 ModuleVersion)不在 rel 中的模块
  2. 如何(从 FeaturedModules)找到一系列具有给定 ModuleVersion 的 FeaturedModules
4

1 回答 1

1

一般来说:向Module模型添加一个布尔标志是个好主意,多亏了这一点,您不需要编写复杂的查询来查找包含关系的模块,您只需检查该标志:

public static List<Module> findAllFeatured() {
    return find.select("id,name").where().eq("isFeatured", true).findList();
}

public static List<Module> findAllNotFeatured() {
    // give here list of field to select WITHOUT featured, otherwise it will 
    // create a JOIN to featured which will result that you will be not able
    // to get records without associations
    return find.select("id, name").where().eq("isFeatured", false).findList();
} 

使用该isFeatured标志,您也可以ModuleVersion轻松过滤 s:

public static List<ModuleVersion> findAll(String version) {
    return find.fetch("module").where().like("version", version).findList();
}

public static List<ModuleVersion> findFeatured(String version) {
    return find.fetch("module")
            .where().like("version", version).eq("module.isFeatured", true).findList();
}

public static List<ModuleVersion> findNotFeatured(String version) {
    return find.fetch("module")
            .where().like("version", version).eq("module.isFeatured", false).findList();
}

当然,对于“自动”设置标志,您应该覆盖模型中的方法save()update(Object o)方法,Module如果您需要此示例,请告诉我。

于 2012-10-21T20:17:59.370 回答