Я попытался создать веб-приложение, состоящее из shoppingcart
и cartitem
s, используя playframework
. Я создал следующие сопоставления, и когда я попытался запустить веб-приложение, я обнаружил, что созданные таблицы postgres db
не имеютзначения, которые создают двунаправленную связь.
@Entity
public class CartItem extends Model implements Comparable<CartItem>
@OneToOne
public Product pdt;
@ManyToOne
public ShoppingCart cart;
public int quantity;
...
}
@Entity
public class ShoppingCart extends Model {
@OneToOne
public MyUser customer;
@OneToMany(mappedBy="cart", cascade=CascadeType.ALL)
public Set<CartItem> cartItems;
public ShoppingCart(MyUser customer) {
super();
this.customer = customer;
this.cartItems = new TreeSet<CartItem>();
}
...
}
Когда я добавил cartitem в корзину,
public static void addItemToCart(Long productId,Long cartId,String quantity) {
Product pdt = Product.findById(productId);
ShoppingCart cart = ShoppingCart.findById(cartId);
int qty = Integer.parseInt(quantity);
System.out.println("create cartitem from "+qty +" copies of product="+pdt.getName()+" for user="+cart.getCustomer().getEmail());
CartItem cartItem = new CartItem(pdt,qty);
cart.addItem(cartItem);
cart.save();
redirect("/");
}
Когда этот метод был выполнен во время публикации, оператор println () произвел
create cartitem from 3 copies of product=Product1 for user=jon@gmail.com
Созданные таблицы показали эти данные
select * from shoppingcart ;
id | customer_id
-----+-------------
191 | 151
(1 row)
select * from cartitem ;
id | quantity | product_id | cart_id
-----+----------+------------+---------
192 | 3 | 168 |
(1 row)
Столбец cart_id не имеет значения . Есть ли какая-то проблема в том, как я определил свои отображения?Может кто-нибудь помочь мне решить эту проблему?
ниже приведена схема таблицы, заданная \ d в psql
\d cartitem
Table "public.cartitem"
Column | Type | Modifiers
----------+---------+-----------
id | bigint | not null
quantity | integer | not null
product_id | bigint |
cart_id | bigint |
Indexes:
"cartitem_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
"fk4393e7353ab523e" FOREIGN KEY (product_id) REFERENCES product(id)
"fk4393e7355396066" FOREIGN KEY (cart_id) REFERENCES shoppingcart(id)
update: Я сделал эту работу к
cartItem.setCart(cart);//why do I have to do this?
Теперь, после сохранения корзины, таблица cartitem имеет
select * from cartitem;
id | quantity | product_id | cart_id
-----+----------+------------+---------
197 | 4 | 164 | 196
(1 row)
Итак, я думаю, что двунаправленная ассоциация не работает .. Кто-то знает почему?