【发布时间】:2010-12-28 17:36:30
【问题描述】:
在我目前正在处理的代码中,我遇到了一段代码,其中 MyClass 的字段应该根据使用的语言进行设置。但实际上语言代码已被硬编码到 Hibernate UserType 类中。我不知何故需要告诉 Hibernate 使用什么语言,但我怎样才能做到这一点?
以下是修改后的代码版本,尽可能针对具体问题。
I18nStringUserType 类
/**
* Gets a localized string based on the key and current language
* TODO: Remove hardcoded language value
*
* @see org.hibernate.usertype.
* UserType#nullSafeGet(ResultSet, String[], Object)
**/
public Object nullSafeGet(ResultSet rs, String[] names,
Object owner) throws Exception
{
String key = (String) Hibernate.STRING.nullSafeGet(rs, names);
String language = "US"; // design-smell. FIX!
return I18nStringFactory.getI18nString(key, language);
}
提供 MyClass 的 DAO 使用 Spring 的 HibernateDaoSupport 类。我可以以某种方式修改它以将参数传递给 Hibernate,告诉它使用某种特定的语言吗?
public class HibernateMyClassDAO extends HibernateDaoSupport{
public MyClass get(Long id) {
MyClass fund = (MyClass) getHibernateTemplate().get(MyClass.class, id);
}
}
这是 Hibernate 映射的编辑版本。不知道是否需要。
<hibernate-mapping>
<class name="MyClass" table="MYCLASS" >
<id name="id" type="java.lang.Long" column="ID" />
<property name="description" column="I18DESCRIPTION"
insert="false" update="false"
type="18nStringUserType"/>
</class>
...
</hibernate-mapping>
我刚刚接触过 Spring 和 Hibernate,所以对我很温和;)我不确定这个问题是否充分反映了手头的问题,所以请随意提出一个更有说服力的标题。
【问题讨论】: