Playframework 更新被替换的OneToMany ArrayList';s级联实体的对象

Playframework 更新被替换的OneToMany ArrayList';s级联实体的对象,playframework,ebean,Playframework,Ebean,我正在使用PlayFramework 2.2.1/Java/Ebean/MySQL Thera分为两类(实体): 我做错了什么?你做的一切都对。 如果要更新某些内容,需要加载、修改和保存。 如果要添加某些内容,请创建新对象并保存它 可以查看对象的@Id值,而不是列表中对象的索引。如果对象没有id,Ebean将在表中创建新记录 也许,如果您创建具有相同id的新对象,Ebean将更新它。为埃克斯梅普 Item item3 = new Item(); item3.id = cart.items.get

我正在使用PlayFramework 2.2.1/Java/Ebean/MySQL
Thera分为两类(实体):


我做错了什么?

你做的一切都对。 如果要更新某些内容,需要加载、修改和保存。 如果要添加某些内容,请创建新对象并保存它

可以查看对象的@Id值,而不是列表中对象的索引。如果对象没有id,Ebean将在表中创建新记录

也许,如果您创建具有相同id的新对象,Ebean将更新它。为埃克斯梅普

Item item3 = new Item();
item3.id = cart.items.get(1).id;
item3.name = "Apple";
但是1)我不能告诉你它是否有效2)它是真的黑客,你真的不需要使用它


如果要修改
项中的对象,需要加载并修改加载的对象,这是正确的方法。

我也遇到过类似的问题,但发现解决方案是使用setter来更改值,而不是直接访问字段。我假设在方法中注入了一些魔力来通知子系统对象的变化,允许更新等等

是的,我会像这样编写原始示例(假设数据库事先是空的):

希望有帮助

    Cart cart = new Cart();
    Item item1 = new Item(); item1.name = "Banana";
    Item item2 = new Item(); item2.name = "Peach";
    cart.items = new ArrayList<Item>();
    cart.items.add(item1);
    cart.items.add(item2);
    cart.save();
    Cart cart = Cart.find.all().get(0);
    cart.items.get(0).name="Orange";                //updates perfectly
    Item item3 = new Item(); item3.name = "Apple";  
    cart.items.set(1, item3);                       //adds additional third record
    cart.update();
Item item3 = new Item();
item3.id = cart.items.get(1).id;
item3.name = "Apple";
Cart cart = new Cart();
Item item1 = new Item(); item1.setName("Banana");
Item item2 = new Item(); item2.setName("Peach");
cart.items = new ArrayList<Item>();
cart.items.add(item1);
cart.items.add(item2);
cart.save();

Cart cart = Cart.find.all().get(0);

Item item1 = cart.items.get(0);
item1.setName("Orange");

Item item2 = cart.items.get(1);
item2.setName("Apple");  

cart.update();
Item item2 = new Item();
item2.setId(1); // this way Ebean will do the update
item2.setName("Apple");

cart.update();