2014-10-16 85 views
0

我想存儲與整數,實體但JPA被存儲實體直列所以這意味着我得到的是一個錯誤的地圖:JPA 2.0地圖<整數,實體>

時遇到截斷誤差試圖縮小VARCHAR 「곭獲4捯洮瑨潭慳灥牯疇歡⹡汰瑩浩涌⹭潤敬⹈慲摷慲敆潯瑰物湴Ȁౌ彰敲獩獴敮捥彥整舍䝲潵灴,䱯牧⽥捬楰獥⽰敲獩獴&「到 長度255 ..

我怎麼能強迫JPA只存儲實體的id?

編輯:

@ElementCollection 
private Map<Integer, Footprint> footprints = new LinkedHashMap<>(); 
+0

請將您的地圖代碼添加到問題中。 – unwichtich 2014-10-16 17:53:29

+0

已經完成。 Integer應該表示腳印的位置 – perotom 2014-10-16 17:56:41

+0

按照定義,ElementCollection不包含實體。ElementCollection包含基本類型或嵌入類型。你想要的是一個OneToMany。 – 2014-10-16 19:17:45

回答

0

我不會說這是不可能與@ElementCollection但你可能想要的是一個單向@OneToMany關係。

如果在你的地圖整數真是相應足跡實體的ID,地圖的構建也將是多餘的。

嘗試這樣:

@Entity 
public class Something { 

    @Id 
    @Column(name="SOME_ID") 
    private long id; 

    @OneToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinColumn(name="SOMETHING_ID", referencedColumnName="SOME_ID") 
    private List<Footprint> footprints = new LinkedList<>(); 

} 

參見:

+0

多數民衆贊成在良好的但我想添加一個額外的整數不是實體的ID。該表應具有兩個屬性:腳印的id和不同的額外整數。 – perotom 2014-10-20 07:40:37

0

比方說,你Footprint實體的定義如下:

<!--language: java--> 

    @Entity 
    public class Footprint { 
     @Id 
     private String id;     //PK of Footprint 

     @ManyToOne       //owning side of the relationship 
     @JoinColumn(name = "id_something") //FK of Something 
     private Something something; 
    } 

通常用於密鑰可以以兩種方式被建模Map<Basic, Entity>類型的映射:

  1. @MapKeyColumn註解創建在足跡實體(的關係持有端)的附加列來存儲地圖鍵

    @Entity 
    public class Something { 
        @Id 
        private Integer id; 
    
        @OneToMany(mappedBy = "something") //non-owning side of the relationship 
        @MapKeyColumn(name = "id_footprint") //specifies the map's key 
        private Map<Integer, Footprint> footprints = new LinkedHashMap<>(); 
    } 
    

    上述關係將產生CORRE既受數據庫表:

    Footprint 
    -------------------- 
    id   int PK 
    id_something int FK 
    id_footprint int  <-- referenced by the map's key 
    
    Something 
    -------------------- 
    id   int PK 
    
  2. @MapKey批註不創建足跡實體(的關係持有端)附加列和地圖鍵是通過參考其主鍵存儲作爲實體的一部分:

    @Entity 
    public class Something { 
        @Id 
        private Integer id; 
    
        @OneToMany(mappedBy = "something") //non-owning side of the relationship 
        @MapKey(name = "id")    //refers to Footprint's primary key 
        private Map<Integer, Footprint> footprints = new LinkedHashMap<>(); 
    } 
    

    上述關係將產生相應的數據庫表:

    Footprint 
    -------------------- 
    id   int PK <-- referenced by the map's key 
    id_something int FK 
    
    Something 
    -------------------- 
    id   int PK 
    
相關問題