Tim*_*yer 5 java spring hibernate projection partial
我正在尝试使用hibernate中的投影返回部分对象,如下所示:
电影课:
@Table(name = "Movies")
public class Movie extends Entity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "title")
private String title;
@OneToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinTable(name = "Movie_Genre", joinColumns = {@JoinColumn(name = "movieId")}, inverseJoinColumns = {@JoinColumn(name = "genreId")})
private List<Genre> genres;
Run Code Online (Sandbox Code Playgroud)
然后,当用户转到htp:// localhost:8080 / api / movies?fields = genres时,这称为:
电影DAO:
Criteria cr = getCurrentSession().createCriteria(Movie.class);
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("genres"), "genres");
cr.setProjection(projectionList);
cr.setResultTransformer(Transformers.aliasToBean(Movie.class));
return cr.list();
Run Code Online (Sandbox Code Playgroud)
但这返回:
java.lang.ArrayIndexOutOfBoundsException: 0
org.hibernate.loader.criteria.CriteriaLoader.getResultRow(CriteriaLoader.java:166)
Run Code Online (Sandbox Code Playgroud)
休眠查询:
select this_.id as y0_ from Movies this_
Run Code Online (Sandbox Code Playgroud)
当您要投影集合时,投影无法使用...
有人可以告诉我该怎么做吗?如何解决?
提前致谢!
不同之处在于,对于标题,您实际上在电影实体中有一个字段。对于集合来说,这不起作用,因为数据库表没有字段“流派”。相反,有一个名为“Movie_Genre”的实体,它实际上具有电影和流派的外键字段。
因此,在数据库级别上,没有“流派”字段,因此基本上只有异常有点误导。CriteriaLoader 中的“applyLocks”中抛出异常,并且由于数据库方言找不到“流派”列,因此返回的结果中实际上没有列。
您使用的是哪个版本的 Hibernate?
为什么您使用投影而不仅仅是 Restrictions.in?
| 归档时间: |
|
| 查看次数: |
1944 次 |
| 最近记录: |