Hibernate возвращает значение null из getCurrentPrice во внешнем транзакционном классе - PullRequest
0 голосов
/ 04 октября 2018

Hibernate возвращает null из getCurrentPrice во внешнем транзакционном классе.

Но новый вызов get by id возвращает продукт с нормальной текущей ценой.

Как это исправить?

Вот мой класс Product

@Table(name = "products")
public class Product {//...
@OneToMany(mappedBy = "product", fetch = FetchType.LAZY)
private Set<OrderItem> orderItems = new HashSet<>();}

И OrderItem

@Table(name = "orderItems")
public class OrderItem extends BaseModel {//...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "productId")
private Product product;

@Column
private double currentPrice;
}

И DAO

@Repository
@Transactional
public class HibernateOrderDao {//...
public Serializable save(Order order) {
    order.getReceiver().getOrdersToReceive().add(order);
    order.getItems().forEach(item -> {
        item.setOrder(order);
        item.getProduct().getOrderItems().add(item);//todo improve by direct sql or...!
    });
    order.getAddresses().forEach(address -> address.getOrders().add(order));

    return super.save(order);
}

Но во внешнем транзакционном методе getCurrentPrice возвращает нуль

  private Double calculateItemsCost(final OrderItem item) {
    return item.getProduct().getCurrentPrice()
            * item.getQuantity();
}

1 Ответ

0 голосов
/ 04 октября 2018

Если вы видите идентификатор продукта, попробуйте позвонить Product product = productService.findById(item.getProduct().getId()), а затем item.setProduct(product)

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