JPA: сделать два поля уникальным ключом или позволить обновлять jpa, но не вставлять - PullRequest
0 голосов
/ 10 мая 2019

Это моя сущность:

@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;

I требование:

Пользователь + Продукт должен быть уникальным ключом, каждый пользователь может создать только один заказ для продукта.

Бу моя проблема:


    @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 обновить базу данных, если в базе данных уже есть запись, в которой есть значение пользователя и продукта.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Чтобы указать уникальный ключ, просто добавьте аннотацию поверх класса сущности:

@Table(uniqueConstraints={@UniqueConstraint(columnNames={"userId", "productId"})})

Чтобы выполнить обновление, вы должны сначала найти управляемый объект, а затем обновить объект любым желаемым значением. Например:

Order order = orderRepo.findById(id);
order.setUser(...)
order.setProduct(...)
0 голосов
/ 10 мая 2019

В JPA нет saveOrUpdate. Что я делаю, это для поиска записи и в случае обнаружения обновляю ее, используя явное обновление обновлений с помощью entityManager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...