2016-07-06 2 views
0

私はJPAマッピングの初心者です。私はすべての製品グループ/コストグループの組み合わせの値を指定する単純なエンティティ(基本的に2次元行列)を持っています。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; 
} 

今私は(すなわちproduct_group_idは、現在の製品グループのIDに等しいすべてのCostDistributionレコードをロードする)ProductGroupがロードされている。この行列の関連する列への読み取り専用アクセスを取得したいのですが。私はこれを行う方法を理解することはできません。

@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; 
} 
+0

そのマッピングが何を意味するのかわかりません。これが1-N bidir(ProductGroup -CostDistribution)の場合、それは '@ OneToMany'でなければなりません。要素がエンティティでない場合にのみ '@ ElementCollection'を使用します。すべてのJPAドキュメントは、 –

+0

ProductGroupとCostGroupが単純なテーブルであり、基本的にIDと名前であることを説明する必要があります。 CostDistributionは、ProductGroupとCostGroupの各組み合わせに値をマッピングします。構造は 'product_group_id、cost_group_id、value'です。 – Arthur

答えて

0

正解:

@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 
関連する問題