java – 如何使用Ebean查询具有onetomany和manytoone关系的表
发布时间:2020-12-14 19:32:49 所属栏目:Java 来源:网络整理
导读:我正在使用Play Framework 2.1.0和Ebean,在查询下面列出的以下场景时遇到问题: 我有3个类来表示数据库中的表. class project { ... @OneToMany public SubProject sub; }class SubProject { ... @ManyToOne public Project project; @OneToMany public Mini
我正在使用Play Framework 2.1.0和Ebean,在查询下面列出的以下场景时遇到问题:
我有3个类来表示数据库中的表. class project { ... @OneToMany public SubProject sub; } class SubProject { ... @ManyToOne public Project project; @OneToMany public MiniProject mini; } class MiniProject { ... @ManyToOne public SubProject sub; } 使用Ebean,如何 >检索项目列表的所有子项目? 解决方法
首先,您错误地定义了类.您的@OneToMany注释应该在元素列表上定义.我更正了这些映射,然后编写了检索所需查询的测试方法.这是代码:
项目类: @Entity public class Project { @Id public Long id; @OneToMany(mappedBy="project") public List<SubProject> subprojects; } 子项目类: @Entity public class SubProject { @Id public Long id; @ManyToOne public Project project; @OneToMany(mappedBy="subproject") public List<MiniProject> miniprojects; } MiniProject类: @Entity public class MiniProject { @Id public Long id; @ManyToOne public SubProject subproject; } 测试方法: @Test public void subTest () { FakeApplication app = Helpers.fakeApplication(Helpers.inMemoryDatabase()); Helpers.start(app); Project p1 = new Project(); p1.id=1L; SubProject s1 = new SubProject(); SubProject s2 = new SubProject(); s1.id=1L; s2.id=2L; p1.subprojects.add(s1); p1.subprojects.add(s2); s1.project = p1; s2.project = p1; MiniProject m1 = new MiniProject(); MiniProject m2 = new MiniProject(); MiniProject m3 = new MiniProject(); MiniProject m4 = new MiniProject(); m1.id=1L; m2.id=2L; m3.id=3L; m4.id=4L; s1.miniprojects.add(m1); s1.miniprojects.add(m2); s2.miniprojects.add(m3); s2.miniprojects.add(m4); m1.subproject =s1; m2.subproject =s1; m3.subproject =s2; m4.subproject =s2; Ebean.save(p1); Ebean.save(s1); Ebean.save(s2); Ebean.save(m1); Ebean.save(m2); Ebean.save(m3); Ebean.save(m4); // retrieve all the subprojects of a list of Projects List<Long> projectIds = new ArrayList<Long>(); projectIds.add(1L); List<SubProject> subList = Ebean.createQuery(SubProject.class).where(Expr.in("project.id",projectIds)).findList(); // retrieve all the miniprojects of a Project Long projectId = 1L; List<MiniProject> miniList = Ebean.createQuery(MiniProject.class).where(Expr.eq("subproject.project.id",projectId)).findList(); // given a list of sub projects,how to retrieve all the miniprojects List<Long> subprojectIds = new ArrayList<Long>(); subprojectIds.add(1L); List<MiniProject> miniSubList = Ebean.createQuery(MiniProject.class).where(Expr.in("subproject.id",subprojectIds)).findList(); for(SubProject sub: subList) { System.out.println("subproject: "+sub.id); } System.out.println("-----------"); for(MiniProject mini: miniList) { System.out.println("miniproject: "+mini.id); } System.out.println("-----------"); for(MiniProject mini: miniSubList) { System.out.println("miniproject: "+mini.id); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |