0
我在JPA映射初学者。我有一个简单的实体(本质上是一个2D矩阵),为每个产品组/成本组合指定一个值。现在加载数据在JPA
@Entity
public class CostDistribution {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@NotNull
@OneToOne
private ProductGroup productGroup;
@NotNull
@OneToOne
private CostGroup costGroup;
private Long value;
}
我想获得只读访问时ProductGroup装入此矩阵的相应列(即加载所有CostDistribution记录中,其中product_group_id等于当前产品组的ID)。我无法弄清楚如何做到这一点。这是我的尝试:
@ElementCollection
@CollectionTable(name="cost_distribution", [email protected](name="product_group_id"))
,但我得到一个异常:Same physical table name [cost_distribution] references several logical table names: [CostDistribution], [cost_distribution]
什么我误解吗?
@Entity
public class ProductGroup {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(length=50)
@NotNull
@Size(max=50)
private String name;
@???
private List<CostDistribution> costDistribution;
}
不知道该映射应该表示什么。如果这是1-N bidir(ProductGroup -CostDistribution),那么它应该是'@ OneToMany'。当元素不是实体时,只能使用'@ ElementCollection'。任何JPA文档都应该解释 –
ProductGroup和CostGroup是简单的表格,基本上是一个ID和一个名称。 CostDistribution将一个值映射到ProductGroup和CostGroup的每个组合。它的结构是'product_group_id,cost_group_id,value'。 – Arthur