我有以下实体:
@RooEntity
Class X {
@NotNull
private Locale locale;
}
是否可以在数据库中存储Locale对象的toString()表示,并且在检索时我仍然可以获取Locale对象?
我可以在这里使用@Basic注释吗?
答案 0 :(得分:6)
您还可以使用属性转换器
public class LocaleConverter implements AttributeConverter<Locale, String> {
@Override
public String convertToDatabaseColumn(Locale locale) {
if (locale != null) {
return locale.toLanguageTag();
}
return null;
}
@Override
public Locale convertToEntityAttribute(String languageTag) {
if (languageTag != null && !languageTag.isEmpty()) {
return Locale.forLanguageTag(languageTag);
}
return null;
}
}
转换器:
report = Report.new(name: params[:name])
report.save_with_nested_attributes(report_clients_attributes)
答案 1 :(得分:3)
您可以将localeString(或语言)持久保存到数据库,并在获取实体后重新创建Locale对象。
这很简单:
@RooEntity
Class X {
@NotNull
@Basic
private String localeString;
....
public Locale getLocaleFromString() {
return new Locale(localeString);
}
}
答案 2 :(得分:0)
是的,它可以存储而无需任何其他配置。 Hibernate具有内置的基本类型LocalType,可将java.util.Locale转换为jdbc VARCHAR类型,反之亦然。
示例:
...
import java.util.Locale;
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Basic(optional = false)
private Locale locale;
// getters and setters
}
SQL(已在MySQL上测试):
create table user
(
id bigint auto_increment primary key,
locale varchar(5) not null
);
结果:以Java语言环境格式存储的数据:“ en_US”