您可以实现如下所示:
引入一个方法来检查数据库中是否已经存在Item:
// Session session= ...
public Map<Integer, Item> getItemIfExist(String item_name) {
Map<Integer, Item> returnMap = new HashMap<>();
Criteria cr = session.createCriteria(Item.class);
cr.add(Restrictions.eq("itemName", item_name));
List<Item> items = cr.list();
for (Item item : items) {
Set<Price> price = item.getPrices();
for (Price p : price) {
returnMap.put(p.getPriceId(), item);
}
}
return returnMap;
}
如果商品已经在数据库中,您可以更新现有商品的价格:
String item_name = "Water";//this may vary according to your requirement
double newPrice = 4.50;//as well as the price
if (!checkItemIfExist(item_name).isEmpty()) {
for (Map.Entry<Integer, Item> entry : checkItemIfExist(item_name).entrySet()) {
int priceId = entry.getKey();
Item item = entry.getValue();
session.beginTransaction();
Price price = (Price) session.load(Price.class, priceId);
price.setItem(item);
price.setPrice(newPrice);
session.update(price);
session.getTransaction().commit();
}}
否则,您可以将其作为新项目保存到数据库:
else {
session.beginTransaction();
Item item = new Item(item_name);
Price price = new Price(item, newPrice);
session.save(price);
session.getTransaction().commit();
}
更新:
项目实体类:-
public class Item implements java.io.Serializable {
private Integer itemId;
private String itemName;
private Set<Price> prices = new HashSet<>();
...
价格实体类:-
public class Price implements java.io.Serializable {
private Integer priceId;
private Item item;
private double price;
...