2015-10-06 57 views
3

外鍵元素集合映射:JPA /休眠如何考慮這兩個表通過註釋

CREATE TABLE `soc` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(32), 
    PRIMARY KEY (`id`)); 

CREATE TABLE `soc_attitude` (
    `soc_id` INT NOT NULL, 
    `target_soc_id` INT NOT NULL, 
    `attitude` INT, 
    PRIMARY KEY (`soc_id`,`target_soc_id`)); 

類,我想所有行從匹配this.soc_id soc_attitude表使用領域是這樣的:

private Map<Integer,Integer> attitudes; 

其中地圖的關鍵是target_soc_id和價值是態度

我得到儘可能的:

@Entity 
@Table(name = "soc") 
public class Soc { 
    @Id 
    @Column(name="id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    @Column(name="name") 
    private String name; 

    @ElementCollection 
    @CollectionTable(name="soc_attitude",[email protected](name="soc_id")) 
    @Column(name="attitude") 
    private Map<Integer,Integer> attitudes; 

但我認爲這會讓soc_id鍵和態度值。

我使用哪些註釋? (使用Hibernate 4.3.11.Final)

回答

2

使用@MapKeyColumn

試試這個:

@ElementCollection 
@CollectionTable(name="soc_attitude",[email protected](name="soc_id")) 
@Column(name="attitude") 
@MapKeyColumn(name="target_soc_id") 
private Map<Integer,Integer> attitudes; 
+0

工作就像一個魅力!謝謝。我在Hibernate集合映射文檔中看到了這一點,但不清楚它是否也可以應用於@ElementCollection。 –

+0

如果「態度」是JPA實體,它將會有什麼樣子?像'地圖<整數,態度>態度'。獲取SQL錯誤。乾杯 – Blauhirn

+0

@Blauhirn ok我自己修正了:在這種情況下,需要使用'@ ManyToMany'和'@ JoinTable'來代替elem.collection和coll.table。 – Blauhirn