2014-04-20 2 views
3

У меня есть 2 объекта. Магазин и продукт, имеющие отношение «многие ко многим» и PlayFramework, создали таблицу product_shop, в которой хранится shop_id, product_id, но каждый раз, когда я добавляю новый продукт, предыдущая строка product_id удаляется, а новая сохраняется в таблице product_shop.Предыдущие данные удаляются каждый раз, когда новые данные вставляются во многих отношениях.

Product.java

package models; 
@Entity 
public class Product extends Model { 

    @Id 
    public Long id; 

    @Required 
    public String name; 

    @Required 
    public Float price; 

    @OneToOne 
    @Required 
    public String category;  

    @ManyToMany(cascade = CascadeType.ALL) 
    @JoinTable(name="product_shop", 
     joinColumns= 
     @JoinColumn(name="product_id", referencedColumnName="ID"), 
     inverseJoinColumns= 
     @JoinColumn(name="shop_id", referencedColumnName="ID") 
    ) 
    public List<Shop> shops=new ArrayList<>(); 
    public List<Shop> getShops(){return shops;} 

    public static List<Product> findbyid(String mail) { 
     return find.where().eq("owner_email", mail).findList(); 
    } 

    public static List<Product> all() { 
     return find.all(); 
    } 

    public static Model.Finder<Long, Product> find = new Model.Finder<>(Long.class, Product.class);  

    public static Product create(Product product,Shop shop) { 

     product.save(); 
     // product.saveManyToManyAssociations("shops"); 
     List<Product> products = new ArrayList<>(); 
     products.add(product); 

     shop.products = products; 
     shop.save(); 

     return product; 
    }  
} 

Shop.java

package models; 

@Entity 
public class Shop extends Model { 

    @Id 
    public Long id; 

    @Required 
    public String name; 

    @Required 
    public String addressLine1; 

    public String addressLine2; 

    public String addressLine3; 

    @Required 
    public String city; 

    @Required 
    public String town; 

    @Required 
    public String phoneNumber; 

    @ManyToMany(mappedBy = "shops") 
    public List<Product> products=new ArrayList<>(); 


    @Required 
    @OneToOne 
    public String category; 

    @Lob 
    @Column(name = "shop_pic") 
    public byte[] shop_pic; 

    @ManyToOne 
    @Required 
    public User owner; 

    public static Shop create(Shop shop) {  
     shop.save(); 
     return shop; 
    }  
} 

ответ

0

Проблема заключается в методе 'создать' в классе продуктов.
Этот метод создает новый список и добавляет к нему продукт. Затем он присваивает этот список магазину.
Выполнение этой задачи отменяет предыдущий список продуктов. Чтобы решить эту проблему, все, что мы должны изменить, следующее: «0»

public static Product create(Product product,Shop shop) {  
    shop.products.add(product); 
    product.shops.add(shop); 
    product.save(); 
    return product; 
}