【发布时间】:2015-08-29 13:18:53
【问题描述】:
我有两个实体:
public class Photo {
Long id;
String url;
@ManyToOne
@JoinColumn(name ="user_id")
User user;
// other fields and getters/setters
}
第二个:
public class User {
Long id;
@OneToMany(mappedBy = "user")
private Collection<Photo> photos;
// other fields and getters/setters
}
我正在尝试获取此 DTO:
public class UserDTO {
Long id;
List<String> photosUrls;
}
但我找不到正确的解决方案。我写了下一个标准 - 通过登录找到有照片的用户:
getCurrentSession().createCriteria(User.class, "user")
.createAlias("user.photos", "photos")
.setProjection(getUserProjection())
.add(Restrictions.eq("user.login",login))
.setResultTransformer(Transformers.aliasToBean(UserDTO.class))
.list();
// projection
getUserProjection() {
return Projections.projectionList()
.add(Projections.property("user.id"), "id")
.add(Projections.property("photos"), "url");
}
也尝试使用 HQL:
getCurrentSession()
.createQuery("select u.id, p.url " +
" from User u inner join u.photos p " +
" where u.login LIKE :login")
.setString("login", login)
.list();
但是返回的结果是List<Object[]>类型但是我需要List<UserDTO>。
更新:
HTTP 状态 500 - 请求处理失败;嵌套异常是 org.springframework.orm.hibernate4.HibernateSystemException: 为属性调用 setter 时发生 IllegalArgumentException [com.memories.dto.UserDTO.photos(预期类型 = java.util.List)]; 目标 = [com.memories.dto.UserDTO.photos@4e162869],属性值 = [https://i1.sndcdn.com/artworks-000031744302-0730nk-t500x500.jpg] com.memories.dto.UserDTO.photos 的设置器;嵌套异常是 为属性调用 setter 时发生 IllegalArgumentException [com.memories.dto.UserDTO.photos](预期类型 = java.util.List)]; 目标 = [com.memories.dto.UserDTO.photos@4e162869],属性值 = [https://i1.sndcdn.com/artworks-000031744302-0730nk-t500x500.jpg]
【问题讨论】:
-
@DavidLevesque,是的,当然
标签: java hibernate hql hibernate-criteria