Загрузка данных из существующей таблицы соединителей в JPA
Я новичок в картировании 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", joinColumns=@JoinColumn(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 ответ
Правильный ответ для загрузки соответствующих данных из матрицы:
@OneToMany(mappedBy="productGroup", fetch=FetchType.EAGER)
private List<CostDistribution> costDistribution;
Это включается в правильный столбец из таблицы соединителей. Например, при загрузке группы товаров с id=1:
select productgro0_.id as id1_6_0_, productgro0_.name as name2_6_0_, ..., costdistri1_.value as value2_2_2_,
from product_group productgro0_
left outer join cost_distribution costdistri1_ on productgro0_.id=costdistri1_.product_group_id
left outer join cost_group costgroup2_ on costdistri1_.cost_group_id=costgroup2_.id where productgro0_.id=1