【发布时间】:2018-09-29 13:14:17
【问题描述】:
Movie 型号:
@Entity
public class Movie {
private Long id;
private String name;
private Date releaseDate;
private List<MovieCelebrity> movieCelebrities = new ArrayList<>();
// getters & setters
}
MovieCelebrity 型号:
@Entity
public class MovieCelebrity extends DateAudit {
private Long id;
private String characterName;
private Movie movie;
// getters & setters
}
我想在响应中返回 id、name、releaseDate 和 characterName,例如这个:
{
"id": 1,
"name": Scarface,
"releaseDate": 1983,
"characterName": "Tony Montana"
}
所以我做了以下查询:
@Query("SELECT m.id, m.name, m.releaseDate, mc.characterName FROM Movie m JOIN m.movieCelebrities mc " +
"WHERE mc.celebrity.id = :id AND mc.role = :role")
Page<Movie> findMoviesByCelebrity(@Param("id") Long id, @Param("role") CelebrityRole role, Pageable pageable);
但我在响应中收到以下错误:
"java.base/[Ljava.lang.Object; 不能转换为 com.movies.mmdb.model.Movie"
有一种解决方案可以在电影中使用我需要返回的参数创建一个构造函数并进行如下查询:
@Query("SELECT new Movie(m.id, m.name, m.releaseDate, mc.characterName) FROM...)
但由于 characterName 在不同的模型中,我无法制作这样的构造函数。
【问题讨论】:
标签: java spring-boot spring-data-jpa spring-rest