这是我的实体:
@Entity(name = "order_info")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
// the user who create this order
@OneToOne
private User user;
// the product of this order
@OneToOne
@Basic(fetch = FetchType.LAZY)
private Product product;
// money
private Integer monkey;
我的要求是:
用户+产品应为唯一键,每个用户只能为一个产品创建一个订单。
我的问题是:
@Autowired
private OrderCrudRepository repository;
@Test
public void save(){
User user = new User();
user.setId(2);
Product product = new Product();
product.setId(1);
Order order = new Order();
order.setMoney(33);
order.setProduct(product);
order.setUser(user);
repository.save(order);
System.out.println(JSONObject.toJSONString(order, true));
}
有时候,我想更新记录,如果但不保存的话。不幸的是,我在SpringDataJPA中找不到更新。
如果数据库中已有一条包含用户和产品价值的记录,我想强制JPA更新数据库。
我该怎么办?
答案 0 :(得分:0)
JPA中没有saveOrUpdate。我要做的是搜索一条记录,以防万一发现使用EntityManager使用显式更新语句对其进行更新。
答案 1 :(得分:0)
要指定唯一键,只需在实体类的顶部添加注释:
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"userId", "productId"})})
为了进行更新,您必须首先找到托管实体,然后使用所需的任何值更新实体。例如:
Order order = orderRepo.findById(id);
order.setUser(...)
order.setProduct(...)