В коде, над которым я сейчас работаю, я наткнулся на фрагмент кода, где поля 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);
}
DAO, поставляющий MyClass, использует класс 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, так что будьте осторожны со мной;) Я не уверен, что вопрос адекватно отражает имеющуюся проблему, поэтому не стесняйтесь предлагать более выразительное название.