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。我做錯了什麼?
更換
@MapKeyColumn(name = "SPORT_LANGUAGE_KEY")
如果我這樣做,那麼當我店我碰到下面的錯誤值: 值java.sql.SQLException:字段「語言」沒有默認值 – ddelizia 2013-02-22 11:40:57是在保存對象時,語言屬性是否在SportLocalizedString中正確設置? – overmeulen 2013-02-22 11:46:56