两个实体类:
@Entity
public class FilesInfo {
@Id
@GeneratedValue
private Integer id;
private String name;
private String url;
@OneToMany(cascade= CascadeType.ALL)
@JoinColumn(name="fileId")
private Collection<FilesShare> filesShared = new ArrayList<FilesShare>();
public Collection<FilesShare> getFilesShared() {
return filesShared;
}
public void setFilesShared(Collection<FilesShare> filesShared) {
this.filesShared = filesShared;
}
第二个:
@Entity
public class FilesShare {
@Id
@GeneratedValue
private Integer id;
@Column(name="fileId")
private Integer fileId;
private int userId;
private int owner;
@ManyToOne
@JoinColumn(name="fileId", updatable=false,insertable=false)
private FilesInfo filesInfo;
public FilesInfo getFilesInfo() {
return filesInfo;
}
public void setFilesInfo(FilesInfo filesInfo) {
this.filesInfo = filesInfo;
}
daoimpl 方法:
public List<FilesInfo> reqSharedFiles(FilesShare fs) {
session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<FilesInfo> filesInfo = null;
filesInfo=(List<FilesInfo>)session.createQuery("from FilesInfo a, FilesShare b where a.id=b.fileId and b.userId=5 and b.owner=1").list();
现在我不明白 hibernate 何时映射并返回对象,因为我在操作中遇到了无法转换的错误:
Ljava.lang.Object; cannot be cast to app.domain.FilesInfo
Action
private List<FilesInfo> furls= new ArrayList<FilesInfo>();
furls=upload.reqSharedFiles(fs);
for(FilesInfo s: furls) // ERROR IS SHOWING HERE
{
System.out.println(s.getUrl());
}
最佳答案
您的查询不会返回 FilesInfo
列表,而是返回一个二元素对象数组列表,其中对象的类型为 FilesInfo
和 FilesShare
.
您可以重写查询,使其仅返回 FilesInfo
,或者附加 ResultTransformer
它会提取您感兴趣的部分或构造一个可用于获取您真正想要的信息的对象。
关于java - hibernate返回列表转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256499/