ris*_*p89 2 java database hibernate spring-roo
我有以下实体:
@RooEntity
Class X {
@NotNull
private Locale locale;
}
Run Code Online (Sandbox Code Playgroud)
是否可以在数据库中存储Locale对象的toString()表示,并且在检索时我仍然可以获取Locale对象?
我可以在这里使用@Basic注释吗?
小智 6
而且你也可以使用属性转换器
@RooEntity
Class X {
@Column(name = "locale")
@Convert(converter = LocaleConverter.class)
private Locale locale;
...
}
Run Code Online (Sandbox Code Playgroud)
转换器:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
是的,无需任何额外配置即可存储。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
}
Run Code Online (Sandbox Code Playgroud)
SQL(在 MySQL 上测试):
create table user
(
id bigint auto_increment primary key,
locale varchar(5) not null
);
Run Code Online (Sandbox Code Playgroud)
结果:以 Java 语言环境格式存储的数据:“en_US”
您可以将 localeString(或语言)保存到数据库,并在获取实体后重新创建 Locale 对象。
就像这样简单:
@RooEntity
Class X {
@NotNull
@Basic
private String localeString;
....
public Locale getLocaleFromString() {
return new Locale(localeString);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2780 次 |
最近记录: |