2012-02-26 72 views
2

我遇到了一個問題,並試圖解決它的問題。如何使@ManyToOne實體處於休眠狀態的類的Id

問題很簡單我怎樣才能使用Item ID和Amount作爲主鍵?

由於這會使物品成爲一個小塊。如果我使用@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

這沒有多大意義了我。多對一的關係意味着你的許多派生記錄映射到一個'C_Item',這意味着在派生的一端'C_Item'不會是唯一的。哪些有點讓它成爲一個id沒用。 – Perception 2012-02-26 06:54:58

+0

其因爲1項可以有多個項目列爲拖放。然後另一個項目也可以將其列爲拖放。然後另一個項目將其列爲下降,但下降了另一個數量。 像:藥水盒A滴1瓶紅藥水,藥水盒B滴2瓶紅藥水,藥水盒C再滴1瓶紅藥水。 – Niceone 2012-02-26 12:35:54

回答

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; 
}