繁体   English   中英

播放框架Java中的多对多关系

[英]Many-to-many relationship in play framework java

我正在尝试使用多对多方法产品与商店Product.java有多对多关系

package models;
@Entity
public class Product extends Model {

    @Id
    @SequenceGenerator(name="product_gen", sequenceName="product_id_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="product_gen")
    @Column(name="id")
    public Long id;

    @Required
    public String name;

    @Required
    public Float price;

    @ManyToMany(cascade = CascadeType.ALL)
    public List<Shop> shops = new ArrayList<Shop>();

    public Product(String name, float price) {
        this.name = name;
        this.price = price;
    }
    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(String name,float price) {
        Product product = new Product(name, price);
        product.save();
        product.saveManyToManyAssociations("shops");
        return product;
    }




}

播放创建了一个表product_shop,该表具有shop_id和product_id作为外键,但是在添加产品时无法在product_shop表中存储任何值,将不胜感激。

我有AppsUsers 每个应用程序可以有多个用户,每个用户可以使用多个应用程序。

在您的情况下,您可以将App替换为Product ,将User替换为Shop

这是我在Play下的工作代码! 2.2.2

数据库的演变:

create table app_user (
  id                varchar(40) not null,
  constraint pk_fb_user primary key (id)
);

create table app (
  id                    varchar(40) not null,
  name                  text,
  constraint pk_app_id primary key (id)
);

create table membership (
  app_id                varchar(40) not null,
  app_user_id           varchar(40) not null,
  constraint fk_membership_app_id foreign key (app_id) references app,
  constraint fk_membership_app_user_id foreign key (app_user_id) references app_user
);

模型应用

@Entity
public class App extends Model {

    @Id
    public UUID id;

    @Column
    public String name;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "membership")
    public List<User> users;

    ....
}

模型使用者

@Entity
@Table(name = "app_user")
// user is reserved keyword in DB
public class User extends Model {

    @Id
    public UUID id;

}

我不需要访问用户的应用程序,因此用户中没有“应用程序”字段。

尝试查看嵌入式ID。

为您的主键上课

@Embeddable
public class ProductShopKey {
 public Long productId;
 public Long shopId;

 public boolean equals(Object object) {
  if(object isInstanceOf ProductShopKey){
   ProductShopKey key = (ProductShopKey) object
   if(this.productId == key.productId
      && this.shopId == key.shopId
     ){
        return true;
   }
  }
  return false;
 }

 public int hashCode() {
  return productId.hashCode() + shopId.hashCode();
 }
}

然后为课程创建一个实体

@entity
public class ProductShop {
 @EmbeddedId
 public ProductShopKey psKey = new ProductShopKey();

 @ManyToOne
 @JoinColumn(name = "product_id")
 public Product product;

 @ManyToOne
 @JoinColumn(name = "shop_id")
 public Shop shop;

 //Extra value to go in your join table
 public String someValue;
 ...
}

然后ShopProductProductShop都有一对多的关系

将条目插入表中是手动完成的

ProductShop ps = new ProductShop();
ps.psKey.productId = someProductId;
ps.psKey.shopId = someShopId;
ps.someValue = someValue;
ps.save();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM