Play Framework 以及模型类中集合的使用

2024-01-06

我刚刚开始使用 Play 框架,在我的模型类之一中使用集合时遇到了一些问题。我对 Play 和 JPA/Hibernate 非常陌生,所以请原谅我的菜鸟...我尝试在网络上搜索答案,但找不到我想要的东西。

本质上,我有 2 个模型:

@Entity
public class Song extends Model
{
    @Column(unique = true)
    public int songId;
    public String name;
    public String artist;

    public Song() {}

    public Song(int songId, String name, String artist)
    {
        this.songId = songId;
        this.name = name;
        this.artist = artist;
    }
}

@Entity
public class CurrentSongList extends Model {

    @OneToMany(orphanRemoval=false)
    public List<Song> currentSongList;
}

我在这里想要的是数据库中的所有歌曲,然后是一个列表来临时保存这些歌曲的子集(列表内容会随着时间的推移而改变)...如果列表被删除,我不希望这些歌曲被删除(歌曲不应包含任何对列表的引用)。然后,我在应用程序启动时尝试做的就是从数据文件加载歌曲并将歌曲的子集插入列表中,并使用下面的代码保存列表......这就是我遇到无尽问题的地方。

Fixtures.deleteDatabase();
Fixtures.loadModels("songlist.yaml");

List<Song> songs = Song.findAll();
CurrentSongList.deleteAll();
CurrentSongList currentSongs = new CurrentSongList();
currentSongs.currentSongList = new ArrayList<Song>();
currentSongs.currentSongList.add(songs.get(0));
currentSongs.currentSongList.add(songs.get(1));

EntityManager em = JPA.em();
em.persist(currentSongs);
em.flush();

如果我省略刷新调用,则稍后从数据库获取其内容时,列表似乎不会被保存。然而,flush 调用会导致以下异常:

Caused by: org.hibernate.HibernateException: Found two representations of same collection: models.CurrentSongList.currentSongList
    at org.hibernate.engine.Collections.processReachableCollection(Collections.java:175)
    at org.hibernate.event.def.FlushVisitor.processCollection(FlushVisitor.java:60)
    at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:122)
    at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:83)
    at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:77)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:165)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:240)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)

我意识到我可能在这里做了一些愚蠢的事情(持久化之后的flush()真的有必要吗?)并且不明白这些东西如何正常工作,但是,我一直在努力寻找有关这个确切问题的信息。任何有关我如何实现上述目标的帮助将不胜感激。

Thanks!


使用 Play 框架,您无需调用persist。尝试打电话

currentSongs.save();

此外,Play 框架会自动为您的歌曲模型创建一个 id。因此您可能不需要songId除非它是您想要保留的某个预定义值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Play Framework 以及模型类中集合的使用 的相关文章

随机推荐

  • 为什么我的基本默认 .acceptbutton 不起作用?

    我拥有的 我有两个组框 每个组框内都有一个文本框 第三个文本框放置在两个组框的外部 按钮 1 是表单加载时的默认接受按钮 我需要的 当单击按钮 1 或按下 Enter 键 时 我需要按钮 2 成为默认接受按钮 我的问题 尽管我的代码如此 但
  • 通过 HTTP 跟踪 Web 服务器上的文本文件

    寻找有关如何解决以下问题的意见 我的 ColdFusion 9 应用程序有一个简单的记录器 可以将文本写入文件 在我的开发机器上 该文件是本地的 因此我可以使用 tail f 或 CFB 的 TailView 来观看它 我想要一个工具来在它
  • 调用函数:张量“对象”不可调用

    假设我有一个名为test如下 def test X W do stuff return stuff 我称之为使用model test X W 当我第一次调用该函数时 没有收到错误 但是 如果我再次调用该函数 则会收到错误 Tensor ob
  • 如何使用 boost::random_device 生成加密安全的 64 位整数?

    我想做这样的事情 boost random device rd boost random mt19937 64 gen rd boost random uniform int distribution
  • 使用静态数据集作为数据源

    在我的应用程序中 我有一个数据集 其中包含在我的应用程序中以不同形式使用的表 为了能够保持表单之间的并发性 并且不必每次用户打开新表单时都从数据库获取数据 我将 DataSet 作为程序类中的静态字段 如下所示 static class P
  • 在 Haskell 中创建一个列表来计算帕斯卡三角形

    我正在尝试创建一个接受整数的函数m并返回帕斯卡三角形的行数mth row 我已经构建了一个choose函数 它接受两个整数 n 和 k 并返回值 n 选择 k 例如 choose 3 2返回 3 到目前为止 我已经 pascal 0 1 p
  • 为什么饱和度和色调的最大值分别为 240 和 239?

    在 ColorDialog 中 为什么饱和度和色调的最大值分别为 240 和 239 它们对应什么 在 Windows 中 HSL 和 HSV 空间通常会重新映射到 0 到 240 之间的比例 以便可以用 32 位值表示颜色 See htt
  • 在 SVG 中缓和 animateMotion

    我想对 animateMotion 标签应用缓动 我对哪些属性与动画形状相关感到困惑 如果我理解得很好的话计算模式 样条线 是必需的 同时还需要定义keyTimes and 关键样条线 但是使用怎么样关键样条线 and values 但是
  • 如何在php中获取准确的IST时间?

    在 php 中 我使用了日期函数 例如 date Y m d h m s 它不会显示当前时间请帮助我 你想要印度时间 这是我的解决方案 您可以使用Asia Calcutta or Asia Kolkata 两者将同时返回 date defa
  • Visual Studio Code 高级搜索要包含的文件中的通配符

    我正在尝试为具有特定文件名条件的所有文件找到一行代码 我正在尝试利用高级搜索Visual Studio Code 的方法是将wildcard in the 要包含的文件搜索领域 但我没能做到这一点 我尝试使用asterisk 符号 但我认为
  • 更好的 ruby​​ markdown 解释器?

    我正在尝试找到一个可以在 rakefile 中使用的 markdown 解释器类 模块 到目前为止我已经找到了maruku http maruku rubyforge org 但我对测试版有点警惕 有人遇到过 maruku 的问题吗 或者
  • 使用 Graph API 时出现“租户 guid 的租户不存在” - 用户类型为会员的事件

    我正在尝试使用 Microsoft Graph API 访问电子邮件 当我尝试访问电子邮件时 出现以下错误 Microsoft Graph ServiceException 代码 OrganizationFromTenantGuidNotF
  • 如何确定处理器运行的字节序模式?

    如何仅使用汇编语言确定 ARM 处理器运行的字节序模式 我可以很容易地看到 Thumb ARM 状态读取 CPSR 的第 5 位 但我不知道 CPSR 或其他地方是否有对应的位用于字节序 silly example trying to ex
  • 设置 Actionbarsherlock 选项卡的样式

    因此 我尝试设置 Actionbar 选项卡的样式 这是我使用 ActionBarSherlock 库实现的 这是我的代码
  • 无法使用正确的电子邮件和姓名登录

    我正在使用 AJAX 创建登录表单 我基本上在 PHP 上工作 我对 ajax 没有太多了解 请大家帮助我解决我的疑问 当我在电子邮件 ID 和名称中输入任何值时 它就会被记录进入该页面 假设如果我给出了错误的姓名和电子邮件 那么我不会抛出
  • Java - 使用一个函数处理多个事件?

    首先 我是一个十足的Java NOOB 我想用一个函数处理多个按钮按下 并根据单击的按钮执行某些操作 我正在使用Netbeans 并且我添加了一个具有绑定功能的事件 默认情况下 该函数会发送一个 ActionEvent 如何获取单击的对象以
  • 无法从 putty 运行 .py 文件,语法错误:单词意外(需要“)”)

    我对 Python 和 Linux 都很陌生 因此要求尽可能使用最少的假设知识进行简单的解释 但是我非常愿意投入时间和精力来学习 我有一个运行 Linux 的 Raspberry Pi 2 型号 B V1 1 我通过 putty 与这个 p
  • scipy.optimize.minimize('SLSQP') 给定 2000 个暗淡变量时太慢

    我有一个带有约束和上 下界的非线性优化问题 所以使用 scipy 我必须使用 SLSQP 问题显然不是凸的 我让雅可比函数的目标函数和约束函数都能正常工作 结果很好 快 最多 300 个输入向量 所有功能均经过矢量化并调整为运行速度非常快
  • c# 会话“未将对象引用设置为对象的实例。”

    我有一个 ASHX 文件 对象引用未设置为 对象的实例 在线上 HttpContext Current Session loggedIn true 这是我正确使用会话的方式吗 我猜想Session是这里的罪魁祸首 供参考here https
  • Play Framework 以及模型类中集合的使用

    我刚刚开始使用 Play 框架 在我的模型类之一中使用集合时遇到了一些问题 我对 Play 和 JPA Hibernate 非常陌生 所以请原谅我的菜鸟 我尝试在网络上搜索答案 但找不到我想要的东西 本质上 我有 2 个模型 Entity