У меня есть этот метод JPAServiceImpl:JPA настойчивого лицо без упорствовать() инструкция
@Override
@Transactional
public void createPageContent(SellerContent content, long userId) {
Seller s = em.find(Seller.class,userId);
content.setSeller(s);
content.setSeller(s);
s.addContent(content);
}
Это работает, но мне интересно, как это может работать, так как нет никакого em.merge(seller)
или em.persist(content)
.
Продавец имеет отношения CascadeType.ALL with SellerContent.
Не могли бы вы объяснить мне, если это нормальное поведение? Я бы написал и em.merge(seller)
, и em.persist(content)
. Это неправильно?
Например, я написал этот метод:
@Override
@Transactional
public void createFeedback(CartLine cartLine, String feedbackString) {
Product product = cartLine.getProduct();
Feedback feedback = new Feedback();
feedback.setFeedbackContent(feedbackString);
feedback.setCartLine(cartLine);
cartLine.setFeedback(feedback);
product.getFeedbacks().add(feedback);
feedback.setProduct(product);
em.persist(feedback);
em.merge(cartLine);
em.merge(product);
}
В этом методе я писал слияния и сохраняющиеся инструкции. Это неправильно?
+1 Технический термин в jpa lifecyle является «управляемым» объектом – Ralph
@MaksymDemidas Спасибо за объяснение :) Но у меня есть сомнения: вы сказали, что я могу называть 'em.persist()' для экземпляров, которые были созданы с использованием нового ключевого слова. Я использую «Обратная связь обратной связи = новая обратная связь();», а затем «cartLine.setFeedback (обратная связь)»; Если бы я понял, я мог бы удалить 'em.persist (обратную связь)', если я получил CascadeType = PERSIST выше отношения CartLine с обратной связью; я прав? –
Да, вы правы. –