2012-02-26 20 views
2

私は問題があり、それを解決するための方法をすでに試してみました。@ManyToOneエンティティを休止状態のクラスのIDにする方法

問題は非常に簡単です。どのようにアイテムIDと金額を主キーとして使用することができますか?

これにより、アイテムが小さな塊になります。そして、もし私が@MapsIdを使用すると、まったく同じことが起こります。

@Entity 
public class C_Drop extends LightEntity implements Serializable { 

    @Id 
    @ManyToOne 
    private C_Item item; 
    @Id 
    private double amount; 
} 

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class C_Drops extends LightEntity implements Serializable { 

    @Id 
    double id; 

    @OneToMany 
    private List<C_Drop> drops; 
} 
+0

これは私にはあまり意味がありません。多対1の関係は、派生レコードの多くが1つの 'C_Item'にマップされることを意味します。これは、派生した終わりでは' C_Item'が一意ではないことを意味します。それはどちらかというと、無駄なIDになる。 – Perception

+0

これは、1つのアイテムに複数のアイテムがドロップとしてリストされている可能性があるためです。次に、別のアイテムにドロップとしてリストされることもできます。そして別の商品はそれを落としとして記載していますが、他の額は落とします。 のようなもの:ポーションボックス1滴の赤いポーション、ポーションボックスBの赤いポーション2滴、ポーションボックスCの赤いポーション1滴。 – Niceone

答えて

1

私はこれを自分自身を行っていないが、あなたはおそらくComposite Primary Keyと列をダブルマッピングの組み合わせを使用することができます。例えば:次に

@Entity 
@IdClass(C_DropPK.class) 
public class C_Drop extends LightEntity { 
    @Id 
    private double amount; 

    @Id 
    @Column(name = "ITEM_ID") 
    private double itemId; 

    @ManyToOne 
    @JoinColumn(name="ITEM_ID") 
    private C_Item item; 
} 

public class C_DropPK { 
    private double itemId; 

    private double amount; 
} 
関連する問題