Hibernate 从外部事务类中的 getCurrentPrice 返回 null
Posted
技术标签:
【中文标题】Hibernate 从外部事务类中的 getCurrentPrice 返回 null【英文标题】:Hibernate returns null from getCurrentPrice in outer transactional class 【发布时间】:2018-10-04 13:47:17 【问题描述】:。
但是新的 get by id 调用返回的是正常当前价格的产品。
如何解决这个问题?
这是我的产品类
@Table(name = "products")
public class Product //...
@OneToMany(mappedBy = "product", fetch = FetchType.LAZY)
private Set<OrderItem> orderItems = new HashSet<>();
还有订单项
@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 返回 null
private Double calculateItemsCost(final OrderItem item)
return item.getProduct().getCurrentPrice()
* item.getQuantity();
【问题讨论】:
【参考方案1】:如果你能看到产品的id,请尝试拨打Product product = productService.findById(item.getProduct().getId())
,然后拨打item.setProduct(product)
【讨论】:
在 item.getProduct().getOrderItems().add(item) 之后;在调试价格也是0 这会起作用,但据我所知,如果没有这个,它应该可以正常运行。 我不知道数据库中的列是否可以有大写字母,尝试如下:@JoinColumn(name = "productid")
以上是关于Hibernate 从外部事务类中的 getCurrentPrice 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)