我有以下模式:
项目(ID,名称)项目用户(项目ID,用户ID)用户(名称,ID)
实体如下
public class Projects {
private String name;
private long id;
private List<User> users;
public Projects() {
}
}
public class User {
private String name;
private Long id;
}
显然是一对多。项目可以有多个用户。
现在,我的目标是编写jooq查询,在那里我可以获取已经有相应用户的项目对象。
.select(PROJECT.NAME, PROJECT.ID, USERS)
.from(PROJECT)
.join(USERS_PROJECT).on(USERS_PROJECT.PROJECT_ID=PROJECT.ID)
.join(USERS).on(USERS.ID=USERS_PROJECT.USER_ID)
.fetchInto(Project.class);
但是当预期约15时,查询将恢复千分之一的结果
你在做两件事:
.select(PROJECT.NAME, PROJECT.ID, USERS)
.from(PROJECT)
.join(USERS_PROJECT).on(USERS_PROJECT.PROJECT_ID.eq(PROJECT.ID))
.join(USERS).on(USERS.ID.eq(USERS_PROJECT.USER_ID))
.fetch();
这很简单。jOOQ将上述表达式转换为SQL字符串,将其发送到JDBC,接收结果集,并向您提供jOOQresult
。显然,结果是非规范化的(因为您编写了联接),因此您有许多行(大约相当于USERS\u项目
表中的行数)。
这就是让你困惑的地方。您调用了felchTo(Project.class)
,这只是调用getch()
的语法糖。进入(Class)
。这是两个独立的步骤,特别是,进入(Class)步骤不知道您的查询,也不知道您的意图。因此,它不“知道”你在期待大约15个独特的项目和一个嵌套的用户集合。
但有一些方法可以更明确地描绘事物。例如,使用分组(Class,Class)
。这可能不会返回您设计的嵌套类型,而是类似于
Map<Person, List<User>> map = query.fetch().intoGroups(Person.class, User.class);
你可以从那里手动拿。或者,您可以编写一个RecordMapper
并使用它:
List<Person> list = query.fetch().map(record -> new Person(...));
或者,您可以使用任何推荐的第三方映射器,例如:
快速总结我想要实现的目标。请给出实施或设计建议:) 我有两个表:用户,图像。在UserDO中,我希望保留一组所有用户的图像,以及单个图像,即用户的肖像(在我的示例中,该组将包括肖像): 在ImageDO中,我有一个userid作为外键来记录哪个用户上传了图像。但是它没有布尔值,因为认为一个用户可能会上传许多图像,但只有一个是肖像。 有什么方法可以实现这一点吗?或者我需要维护另一个表(例如,Port
我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。
问题内容: 我是Go语言的新手,具有C#背景并且对如何构造Go应用程序感到困惑。 假设我正在构建一个REST API,它将位于数据库之上。还要说,即使完成后,鉴于业务的变迁等,此应用程序可能仍需要频繁更改。 在带有诸如Entity Framework和DTO之类的工具的C#中,我通过从控制器给出的结果中抽象出数据库来缓解此问题。如果更改数据库中一堆字段的名称,则可能必须更改数据库访问逻辑,但是希望
我在JPA实体映射方面有问题。我有一些课: A级 类别b Classc *如何解决这个问题?*我还能使用类继承吗?还是另一个解决这个的方法? 谢了。
我对这些技术是新的,所以提前道歉。 我在我的应用程序中使用了springboot、Spring JPA、hibernate和mapstruct。
我正在尝试使用AutoMapper在LLBLGen实体和DTO之间创建映射。 我的DTO如下所示: ParentEntity包含一个与DTO列表同名的ChildCollection和一个Id(需要忽略其他LLBL字段)。因此,当ParentEntity映射到父d to时,它也应该将ChildCollection映射到一个子列表。 这就是我到目前为止得到的: 这会导致Id被映射,但List的计数为0