我正在学习 Spring,几天前我开始学习 Hibernate。我有我的学习项目,我需要创建一家产品商店。这是实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Table(name = "cart")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Cart {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "quantity")
private int quantity;
@Column(name = "mask")
private String mask;
@Column(name = "price")
private int price;
所以,我创建界面
import org.springframework.data.jpa.repository.JpaRepository;
public interface CartRepository extends JpaRepository<Cart, Integer> {
}
并创建 Controller
@Autowired
CartRepository cartList;
@RequestMapping("/add-black-mask")
public String addBlackMask() {
cartList.save(new Cart(1, 1, "black", 3));
return "masks/add-black-mask";
}
@RequestMapping("/add-build-mask")
public String addBuildMask() {
cartList.save(new Cart(2, 1, "build", 5));
return "masks/add-build-mask";
}
@RequestMapping(value = "/save_product_to_cart")
public ModelAndView saveProduct(@ModelAttribute(value = "cart")
Cart cart, BindingResult result) {
int index = Integer.parseInt(String.valueOf(cartList.count()));
if (cart.getId() == 0) {
cart.setId(index + 1);
cartList.save(cart);
} else {
Cart cart1 = cartList.getOne(cart.getId());
cart1.setMask(cart.getMask());
cart1.setQuantity(cart.getQuantity());
cart1.setPrice(cart.getPrice());
cartList.save(cart1);
}
return new ModelAndView("redirect:/");
}
此外,还有一些其他的 View Controller ,Thymeleaf 等,但还可以。我的问题是 - 当我保存我的产品 1 次时 - 可以,但是当我保存第二次时 - 它不起作用(我想是因为我无法保存具有相似 ID 的 2 行)所以看来我的表中有唯一的 ID 并且它不能重复。问题是 - 如何删除唯一 ID 或以任何方式更改我的代码?提前致谢!
附:我在这里阅读了一些其他主题,但这对我没有帮助。
最佳答案
当您使用GENERATIONTYPE.IDENTITY
时您要求 hibernate 让数据库为您处理 Id,您不应该自己设置它。您正在更改 id 的值,只需创建一个新产品,设置所有字段并在事务上下文中保存您的产品。还始终使用原语的包装版本来实现序列化目的。 (Long
是一个对象,但 long
是一个原语。)您可以通过 google 装箱和拆箱了解更多相关信息。
关于java - Hibernate不允许保存具有相似id的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61148773/