JPA:从技术密钥自动刷新映射的实体

时间:2014-01-26 19:44:17

标签: java java-ee jpa

我在其中一个网站中有一个单向映射的@OneToMany关系。让我们说这样的事情(不完整 - 只是为了这个想法):

@Entity
public class Contract {

  @OneToMany
  @JoinColumn(name="...", referencedColumnName="...")
  Product product;

现在,作为第一步,我从后端加载所有产品,然后从不同的界面加载所有合同。后一个接口只传递产品的技术密钥。目前我加载所有产品,将它们作为键和对象放在地图中,然后在加载时将它们放入新的合同中。这真的是要走的路吗? 我试验了一段时间,只将Product中的equals设置为技术密钥,并跳过JPA在合并Contract实体时会做的伎俩 - 但这并不成功。

欢迎任何提示。 提前致谢

1 个答案:

答案 0 :(得分:0)

正如我从您的示例中所理解的那样,您有一个引用多个产品实体的Contract实体,并且您想知道如何在JPA-Java中反映这一点。如果是这样,那么您只需将产品添加到合同的产品列表中。请记住,JPA将表转换为对象,因此任何关系都将采用类成员的形式。如果关系是多个,则类成员将是一个集合(例如,列表)。然后,您可以:

- 创建一个新的产品系列,添加产品,然后使用这个新系列设置合同的产品系列,如果合同没有产品,这是一个很好的方法:

List<Products> listProducts = new ArrayList<Products>();
//add the products
contract.setProductList(listProducts);

- 收回合同产品的集合,然后添加所需的产品,如果合同中有以前的产品,这是一个很好的方法:

contract.getProductList().add(product);

在任何情况下,您都需要提交更改。请记住,您需要在关系中保留父实体,在本例中为合同。