Загрузка данных из существующей таблицы соединителей в 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 
Другие вопросы по тегам