2010-03-10 39 views
0

這是一個Hibernate/JPA問題。使用在表格中不唯一的Hibernate MapKey

我有一套Schedule對象,每個對象包含各種StepType的幾個Step s。每個StepType在一個時間表內都是唯一的,因此這些步驟將存儲爲Map<StepType, Step>。代碼註釋爲:

@Entity 
public class Schedule implements Serializable { 
    @MapKey(name="type") 
    @OneToMany(cascade=CascadeType.ALL, mappedBy="schedule") 
    private Map<StepType, Step> steps; 
} 

@Entity 
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"schedule", "type"})}) 
public class Step implements Serializable { 
    @ManyToOne 
    private StepType type; 

    @ManyToOne 
    private Schedule schedule; 
} 

不幸的是,這顯然是不允許的。要求MapKey具有與其相關聯的唯一性約束,其中type不具有,因爲步驟類型在特定的計劃中是唯一的。

有沒有更好的方法來註釋這個結構,還是我將不得不重新考慮Hibernate的對象模型?或者這種違規行爲應該是無害的? (該地圖拒絕正確加載,但我無法確認這是爲什麼。)

+0

我有同樣的問題。這種方法是否適合你? – 2012-07-13 08:55:40

回答

0

根據規範,您說得對,需要unicity。但根據我(和你)的說法,只要求「本地化的單一性」似乎是合乎邏輯的。 我已經證明「Pro JPA 2」書中陳述的是相同的:「不需要在這個實體類型的整個域中是唯一的,它只需要在關係的全部範圍內是唯一的」。

我需要與您完全相同的行爲。我會很快測試代碼。

這裏的書的exerpt鏈接: http://books.google.com/books?id=j84hdeHH2PYC&pg=PA119&lpg=PA119&dq=jpa+mapkey+uniqueness&source=bl&ots=C_TluOiJxZ&sig=EibqwD-3slqk7pnEJDK38k4T6Zc&hl=fr&ei=147MTJLTHNC6jAecuanYBw&sa=X&oi=book_result&ct=result&resnum=9&ved=0CEgQ6AEwCA#v=onepage&q=t%20should%20also%20be%20unique%2C%20although%20it%20is%20not%20&f=false