【发布时间】:2021-05-27 17:19:45
【问题描述】:
我使用 querydsl,休眠 我想在 Dto 列表中按 Dto 选择数据但不工作
这是我的代码
@Data
@Entity
public class Team {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
}
@Entity
@Setter
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
}
@Setter
public class TeamDto {
private Long id;
private String name;
private List<MemberDto> members = new ArrayList<>();
}
@Setter
public class MemberDto {
private Long id;
private String name;
}
测试
@BeforeEach
void setup() {
queryFactory = new JPAQueryFactory(em);
Team team = new Team();
team.setName("teamA");
em.persist(team);
Member member = new Member("memberA");
member.setTeam(team);
em.persist(member);
Member member2 = new Member("memberB");
member2.setTeam(team);
em.persist(member2);
em.flush();
em.clear();
}
@Test
void t1() {
TeamDto teamDto = queryFactory
.select(Projections.fields(
TeamDto.class,
team.id,
team.name,
Projections.fields(
MemberDto.class,
member.id,
member.name
).as("members")
))
.from(team)
.fetchOne();
System.out.println("teamDto = " + teamDto);
}
错误日志为 = java.lang.IllegalArgumentException: com.blog.querydsltest.domain.dto.MemberDto 与 java.util.List 不兼容
什么问题??不可能通过 List dto 带来数据?? 我尝试将 Projections.fields 更改为 bean、construct、...但不工作 我该怎么办?
【问题讨论】: