Jpa 更新@OneToMany游戏内框架

Jpa 更新@OneToMany游戏内框架,jpa,playframework,one-to-many,Jpa,Playframework,One To Many,我有一个简单的表单,打算更新购物车中的项目列表。 表单工作得很好,我为表单中的每个项目显示一个输入文本 马车。但是,如果我更改了一个项目文本,然后保存,它将失败,并出现错误 休眠错误: 发生PersistenceException: org.hibernate.PersistentObjectException:传递给的分离实体 持久化:models.Item 表格如下: <section class="form"> #{form @save()} <i

我有一个简单的表单,打算更新购物车中的项目列表。 表单工作得很好,我为表单中的每个项目显示一个输入文本 马车。但是,如果我更改了一个项目文本,然后保存,它将失败,并出现错误 休眠错误: 发生PersistenceException: org.hibernate.PersistentObjectException:传递给的分离实体 持久化:models.Item

表格如下:

<section class="form">
    #{form @save()}
        <input type="hidden" name="cart.id" value="${cart?.id}">

        <p class="field">
            <label for="title">Title :</label>
            <input type="text" name="cart.title" value="${cart?.title}"
            maxlength="50" size="50"/>
            <span class="error">${errors.forKey('cart.title')}</span>
        </p>

        <div id="items">
            #{if cart && cart.items}
                            #{list items:cart.items, as:'item'}
                                    <input type="hidden" name="cart.items[${item_index}].id" value="${item?.id}">
                                    <input type="text"    name="cart.items[${item_index}].text" value="$
{item?.text}"/>
                        #{/list}
                    #{/if}
        </div>

        <p class="buttons">
            <a href="@{index()}">Cancel</a> <input type="submit" value="Save" id="savecart">
        </p>
    #{/form}
</section>

#{form@save()}

标题: ${errors.forKey('cart.title')}

#{if cart&&cart.items} #{列出项目:cart.items,作为:'item'} #{/list} #{/if}

#{/form}
我的实体和控制器:

@Entity
public class Cart extends Model {
    @Required
    public String title;

    @OneToMany(mappedBy = "cart", cascade = CascadeType.ALL)
    public List<Item> items;

    public Cart(String title) {
            this.title = title;
            this.items = new ArrayList<Item>();
    }
}


@Entity
public class Item extends Model {
    @Required
    public String text;

    @ManyToOne
    @Required
    public Cart cart;

    public Item(String text, Cart cart) {
            this.text = text;
            this.cart = cart;
    }

}

public static void save(Cart cart){
    validation.valid(cart);
            if (validation.hasErrors()) {
                    validation.keep();
                    formCart(cart.id);
            }
            cart.save();
            index();
} 
@实体
公共类Cart扩展模型{
@必需的
公共字符串标题;
@OneToMany(mappedBy=“cart”,cascade=CascadeType.ALL)
公共清单项目;
公共购物车(字符串标题){
this.title=标题;
this.items=new ArrayList();
}
}
@实体
公共类项扩展模型{
@必需的
公共字符串文本;
@许多酮
@必需的
公共手推车;
公共项目(字符串文本、购物车){
this.text=文本;
this.cart=购物车;
}
}
公共静态作废保存(购物车){
验证。有效(购物车);
if(validation.hasErrors()){
validation.keep();
formCart(cart.id);
}
cart.save();
索引();
} 
我认为这是一个常见的用例,但是我不确定是否要这样做
走对了

保存实体之前必须合并实体

cart = cart.merge();
cart.save();

在保存实体之前,必须将其合并

cart = cart.merge();
cart.save();

谢谢你的回答。我已经尝试了merge(),但在这种情况下,我的项目不会与这些新值一起保存。事实上,这似乎是一个已知的游戏问题。我今天发现了类似的问题:。谢谢你的回答Seb。我已经尝试了merge(),但在这种情况下,我的项目不会与这些新值一起保存。事实上,这似乎是一个已知的游戏问题。我今天发现了类似的问题:。