java-我的LinkedList并未按原样保存(关于其元素顺序)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-我的LinkedList并未按原样保存(关于其元素顺序),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2611字,纯文字阅读大概需要4分钟。
内容图文
首先,请原谅我英语水平差.我将尽我所能来理解.
我正在尝试重新排序音乐文件的播放列表.播放列表基本上是LinkedList< MusicFiles>.一个名字.
我更改了元素的位置,看起来应该很酷.但是,当我将其保存在数据库中时,顺序不会改变!我做错了,这是事实,但是经过数小时的调试,我的脑子真的可以自己使用调试器了……
这是我的jsf代码(位于p:datatable中):
<p:commandButton title="Move Down"
ajax="false"
image="down"
action="#{playlistMBean.increasePosition(musicFile.URL)}"
onclick="show_my_playlists?face-redirect=true"/>
支持bean代码:
@Named(value = "playlistMBean")
@SessionScoped
public class PlaylistMBean implements Serializable {
@EJB
private PlaylistManager playlistManager;
private Playlist currentPlaylist;
//...
public void increasePosition(String musicURL) {
currentPlaylist.increasePosition(musicURL);
playlistManager.save(currentPlaylist);
}
//...
}
“ currentPlaylist”显然是一个播放列表,因此这是实体bean“ Playlist”中方法的代码:
@Entity
@NamedQueries(/*...*/)
public class Playlist implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToMany(cascade= {CascadeType.REFRESH, CascadeType.MERGE},fetch= FetchType.EAGER)
@OrderBy(/* ??????????? */
private LinkedList<MusicFile> musicList;
private String name;
//...
public void increasePosition(String url) {
if (url != null) {
MusicFile mf = getMusicFileByURL(url);
int position = getPosition(url);
if (position < musicList.size() - 1) {
musicList.remove(position);
musicList.add(position + 1, mf);
}
}
}
最后是播放列表管理器的代码,该代码应将重新排序的播放列表保存在数据库中:
@Stateless
@LocalBean
public class PlaylistManager {
@PersistenceContext(unitName = "Doozer-ejbPU")
private EntityManager em;
public void save(Playlist playlist) {
Playlist p = em.find(Playlist.class, playlist.getId());
if (p != null) {
em.merge(playlist);
}
else {
em.persist(playlist);
}
}
//...
}
最后一步中的给定播放列表是好播放列表(已重新排序).所以我的猜测是我的问题出在实体管理器上(我真是个天才,我知道…).
有人知道为什么吗?
可能来自层叠类型吗?由于缺乏相关知识,因此我不确定应该输入哪一个.我试过CascadeType.ALL,但是添加音乐文件时会引发异常. CascadeType.DETACH是我的首选,因为我不想在删除播放列表时删除音乐…但是在这里,我真的不确定我是否知道我在说什么:(
[编辑]:感谢Piotr Nowicki,我的问题已经改变了很多:如何定义@OrderBy批注以根据其内部顺序对LinkedList进行排序?可能吗?简单/难看的方法是将属性位置添加到MusicFile实体,但我宁愿不这样做.
解决方法:
如果要保留列表中元素在数据库中存储的顺序(并从数据库中进一步检索),则应使用@OrderBy或@OrderColumn批注.
在您的情况下,如果只希望按顺序返回列表而没有任何高级条件,则@OrderColumn应该足够:
@OneToMany(...)
@OrderColumn
private LinkedList<MusicFile> musicList;
内容总结
以上是互联网集市为您收集整理的java-我的LinkedList并未按原样保存(关于其元素顺序)全部内容,希望文章能够帮你解决java-我的LinkedList并未按原样保存(关于其元素顺序)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。