我正在尝试在保留并检索后打印有序列表。
我的实体:
@Entity
public class News {
@Id @GeneratedValue
private Long id;
private String content;
@OneToMany(cascade = CascadeType.ALL)
@OrderBy("likes DESC")
private List<Comment> comments = new LinkedList<>();
//------------------
}
@Entity
public class Comment {
@Id
@GeneratedValue
private Long id;
private String content;
private int likes;
}
主要方法片段:
tx.begin();
{
// persist
News n1 = new News("Super news!!");
Comment c1 = new Comment("comment 1", 1);
Comment c2 = new Comment("comment 2", 200);
Comment c3 = new Comment("comment 3", 10);
n1.addComment(c1);
n1.addComment(c2);
n1.addComment(c3);
em.persist(n1);
// find
News news = em.find(News.class, n1.getId());
for (int i = 0; i < news.getComments().size(); i++) {
System.err.println(news.getComments().get(i).getLikes());
}
}
tx.commit();
结果按声明顺序打印(1 -> 200 -> 10),我期望(200 -> 10 -> 1)。
有人可以帮忙吗?
我猜您是从实体管理器而不是数据库获取实体,因此您将获得与您创建的相同的对象(不是排序的对象)。您应该尝试在之前刷新缓存em.find()
method:
em.getTransaction().begin();
em.persist(n1);
em.getTransaction().commit();
// Clear object
em.getEntityManagerFactory().getCache().evict(News.class, n1.getId());
// find
News news = em.find(News.class, n1.getId());
for (int i=0; i<news.getComments().size(); i++){
System.err.println(news.getComments().get(i).getLikes());
}
From Javadoc https://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html, 方法:
<T> T find(java.lang.Class<T> entityClass, java.lang.Object primaryKey)
通过主键查找。搜索指定类的实体并
首要的关键。如果实体实例包含在持久化中
上下文,它从那里返回.
我理解可能给你带来麻烦的部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)