在提交事务之前未加载JPA引用

时间:2015-12-23 01:58:26

标签: java hibernate jpa entitymanager

我在同一个事务中创建父实体和子实体但是如果我在提交之前看到父实体。子对象引用未显示在父对象中,但在创建子实体时,我已在其中给出了父对象的引用。

例如,我有以下实体:

  • 产品
  • 分类

产品可以有一个或多个类别。我已经创建了它们之间的双向关系,如下所示:

@Entity
@Table(name = "PRODUCT")
public class Product {
 @Id
 @Column(name="PRODUCT_ID")
 int productId;
 ....
 .... 
 @OneToMany(mappedBy = "product", orphanRemoval = true)
 private Set<Category> categories = new HashSet<>();
}

@Entity
@Table(name = "CATEGORY")
public class Category {
 @Id
 int categoryId;
 ....
 ....

 @ManyToOne(optional = false, cascade = CascadeType.ALL)
 @JoinColumn(name = "PRODUCT_ID")
 private Product product;
}

在下面的方法中,我在同一个交易中创建了两个实体,当我在提交之前加载产品时,它显示没有与之关联的类别。但是,如果我在提交事务后加载产品,则会显示对类别的引用。在刷新entitymanager之前,我可以在实体之间建立关系吗?

@transactional
public void saveData() {
  Product product = new Product();
  product.setId(1);
  em().persist(porduct);
  Category category = new Category();
  category.setId(1);
  category.set(product) 
  em().persist(category);

  Product persistedProduct = em().findById(1);
  //Why below statement prints size of categories zero
  System.out.println(persistedProduct.getCategories.size())
}

0 个答案:

没有答案