2013-02-21 20 views
0

我試圖本地化我的jpa應用程序。要做到這一點,我在我的課堂中使用了@MapKeyColumn屬性。所以,我以這種方式定義類:即使數據庫中的數據,JPA-MapKeyColumn爲空

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@Table(name = "BIENTOO_SPORT") 
public class Sport implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "sportId") 
    private Long id; 

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

    @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "sport") 
    @MapKeyColumn(name = "SPORT_LANGUAGE_KEY") 
    private Map<String,SportLocalizedString> sportLocalizedString; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getCode() { 
     return code; 
    } 

    public void setCode(String code) { 
     this.code = code; 
    } 

    public Map<String, SportLocalizedString> getSportLocalizedString() { 
     return sportLocalizedString; 
    } 

    public void setSportLocalizedString(Map<String, SportLocalizedString> sportLocalizedString) { 
     this.sportLocalizedString = sportLocalizedString; 
    } 

    public SportLocalizedString newSportLocalizedString(){ 
     return new SportLocalizedString(); 
    } 

    @Entity 
    @Table(name = "BIENTOO_SPORT_LOCALIZED_STRING") 
    public class SportLocalizedString implements Serializable { 

     @Id 
     @GeneratedValue(generator = "bientooSportLocalizedString", strategy = GenerationType.TABLE) 
     @TableGenerator(name = "bientooSportLocalizedString", table = "SEQUENCE_GENERATOR", pkColumnName = "ID_NAME", valueColumnName = "ID_VAL", pkColumnValue = "sportLocalizedString", allocationSize = 50) 
     @Column(name = "SPORT_LOCALIZED_ID") 
     private Long id; 

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

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

     @ManyToOne 
     private Sport sport; 

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 

     public String getLanguage() { 
      return language; 
     } 

     public void setLanguage(String language) { 
      this.language = language; 
     } 

     public Sport getSport() { 
      return sport; 
     } 

     public void setSport(Sport sport) { 
      this.sport = sport; 
     } 
    } 

} 

正如你可以看到體育我有內部類的一個一對多的關係。當我啓動應用程序時,一切正常。但是當我檢索Sport對象時,map sportLocalizedString爲null。我做錯了什麼?

回答

1

嘗試通過@MapKey(name = "language")

+0

更換@MapKeyColumn(name = "SPORT_LANGUAGE_KEY")如果我這樣做,那麼當我店我碰到下面的錯誤值: 值java.sql.SQLException:字段「語言」沒有默認值 – ddelizia 2013-02-22 11:40:57

+0

是在保存對象時,語言屬性是否在SportLocalizedString中正確設置? – overmeulen 2013-02-22 11:46:56

相關問題