현재 코드에서 MyClass의 필드가 사용중인 언어에 따라 설정되어야하는 조각 코드를 발견했습니다. 그러나 실제로는 언어 코드가 Hibernate UserType 클래스에 하드 코딩되어있다. 나는 어쨌든 Hibernate에게 사용중인 언어를 말할 필요가있다. 그러나 이것을 어떻게 할 수 있는가?NewbieQuestion : 어떻게 DAO에서 Spring + 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에 봄의 HibernateDaoSupport를 클래스를 사용하여 공급한다 DAO. 어떻게 든 특정 언어를 사용하도록하는 인수를 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>
나는 단지이 봄 & 최대 절전 모드에 노출 된, 그래서 나를 부드러운 운임, 문제는 충분히 손에서 문제를 반영하면 내가 확실하지 오전), 그래서 더 이야기 제목을 제안 주시기 바랍니다.
국제화를 수행하는 방법에 대한 정보가 있습니까? 오늘 우리는 모든 i18n 문자열을 데이터베이스에서 추출하여 객체의 필드를 채 웁니다. 나는 언어와 사물의 결합이 매우 낮다는 것을 알았고 문맥 접근법은 해킹 된 것으로 느낀다. – oligofren