可以使用hibernate将Locale对象存储在数据库中

时间:2014-10-24 20:18:51

标签: java database hibernate spring-roo

我有以下实体:

@RooEntity
Class X {
    @NotNull
    private Locale locale;
}

是否可以在数据库中存储Locale对象的toString()表示,并且在检索时我仍然可以获取Locale对象?

我可以在这里使用@Basic注释吗?

3 个答案:

答案 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”