2014-12-08 45 views
1

我有一個實體A和枚舉常量B.我沒有爲枚舉類定義一個實體。但是有一個爲其定義的表 。我有一個連接表,用於存儲屬於實體的B枚舉。JPA如何通過只讀外鍵值設置JoinTable關係

在實體A中,我必須定義這種關係。我想讀取枚舉類的整數值。 通常我們通過以下方式定義這種關係。

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinTable(name = "A_ENUMS", joinColumns = @JoinColumn(name = "A_ID", referencedColumnName = "ID", updatable = false), 
inverseJoinColumns = @JoinColumn(name = "ENUM_ID", referencedColumnName = "ID", updatable = false)) 
private Collection<Integer> enums; 

我試過了,但沒有奏效。因爲我正在加載整數,而不是實體。我怎樣才能通過JPA做到這一點?

+0

'@ OneToMany'是實體之間的關係,嘗試使用'@ ElementCollection'不是作爲[枚舉],並不代表具體的實體! – 2017-04-06 09:47:55

回答

0
// + No need for [Cascade.ALL], 
// + @ElementCollection will be cascaded by default like any A's @Column 
@ElementCollection(fetch = FetchType.EAGER) 
// + You can omit @CollectionTable if you want as all the values you've used, 
// are the JPA default values (I assume that [ID] is @Id of the table [A]) 
// + No need for inverseJoinColumns, and you should not use [ID] 
// for Enum as it's not an entity, and you're interesetd in the integer value instead 
// + updatable = false is ommited, it doens't not make much sense here. 
@CollectionTable(name = "A_ENUMS",      
       joinColumns = @JoinColumn(name = "A_ID", referencedColumnName = "ID")) 
// + Replace [MyIntegerEnum] with the column name of enum value used in [A_ENUMS] table 
@Column(name = "MyIntegerEnum") 
private Collection<Integer> enums; 

@ElementCollection

@OneToMany vs @ElementCollection

+0

這是一個遲到的答案,但它可能有助於這個星球上的人,甚至在這個星系! – 2017-04-11 08:07:32