2014-04-20 6 views
3

다 대다 관계가있는 엔티티 Shop 및 Product가 2 개 있고 PlayFramework가 shop_id, product_id를 저장하는 테이블 product_shop을 만들었지 만 매번 추가 할 때마다 새 제품 이전 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

문제는 제품 클래스의 '생성'방법이다.
이 메서드는 새 목록을 만들고 여기에 제품을 추가합니다. 그런 다음이 목록을 상점에 할당합니다.
이렇게하면 이전 제품 목록보다 우선합니다. 이 문제를 해결하려면 '생성'방법을 다음과 같이 변경해야합니다.

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