这里找不到答案。我有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个实体。
问题:
答案 0 :(得分: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
:
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
方法,如果您需要样本,请告诉我。