2012-01-14 3 views
3

id, name, description 속성을 가진 Category 클래스가 있습니다.다국어 지원을위한 Hibernate 매핑

해당 사용자가 이름과 설명을 다국어 입력하고 저장할 수 있기를 바랍니다.

클래스의 구조와 최대 절전 매핑은 무엇이되어야합니까?

이것은 주석이있는 코드입니다. 하지만 데이터베이스에 물건을 넣지 수 :

@Entity 
@Table(name = "category") 
public class Category { 
@Id 
@GeneratedValue 
public Integer getId() { 
    return id; 
} 
public void setId(Integer id) { 
    this.id = id; 
} 
private Integer id; 
private Map<String, TranslatedString> name; 
private Map<String, TranslatedString> description; 



@ElementCollection 
@CollectionTable(name = "translated_string") 
@MapKeyJoinColumn(name = "langCode") 
public Map<String, TranslatedString> getName() { 
    return this.name; 
} 

public void setName(Map<String, TranslatedString> name) { 
    this.name = name; 
} 

@ElementCollection 
@CollectionTable(name = "translated_string") 
@MapKeyJoinColumn(name = "langCode") 
public Map<String, TranslatedString> getDescription() { 
    return this.description; 
} 

public void setDescription(Map<String, TranslatedString> description) { 
    this.description = description; 
} 



} 


@Embeddable 
public class TranslatedString { 

public Integer getTid() { 
    return tid; 
} 

public void setTid(Integer tid) { 
    this.tid = tid; 
} 

private Integer tid; 



private String langCode; 

@Column(name = "langCode") 
public String getLangCode() { 
    return langCode; 
} 

public void setLangCode(String langCode) { 
    this.langCode = langCode; 
} 

private String text; 

@Column(name = "text") 
public String getText() { 
    return text; 
} 

public void setText(String text) { 
    this.text = text; 
} 

} 

나는 두 개의 테이블이 있습니다 translated_string을 : 아이디, name_id.error가

나는이 정보 메시지가 무엇입니까를 description_id : TID는, 텍스트, 범주를 langCode 최대 절전 모드 : hibernateTemplate으로 카테고리를 저장하려면 카테고리 값 ( )에 삽입하십시오.

내가 ID로 카테고리를 찾으려 할 때, 그것은 CATEGORY_ID 또는 name_KEY 필드가없는 내 translated_string 테이블 때문에

select 

name0_.Category_id as Category1_0_0_, 
name0_.langCode as langCode0_, 
name0_.text as text0_, 
name0_.tid as tid0_, 
name0_.name_KEY as name5_0_ 

from translated_string name0_ 

where name0_.Category_id=? 

을 실행, 난 내가 매핑에 문제가있는 것 같아요.

어디서 잘못 되었나요?

+0

에게 좋은 질문! 내 생각 엔 당신이 각 언어에 대해 하나의 색인을 만들 필요가있다. (당신이 그것들을 섞고 싶지 않다면) 그러나 매핑에 대해서는 전혀 모르겠다. 어쩌면 매핑 파일에서 request_locale을 사용하고 있을까? –

+0

TransaltedString이란 무엇입니까? – Firo

답변

1
class Category { 
    public int Id; 
    public Map<Language, String> names; 
    public Map<Language, String> descriptions; 

    public String getCurrentName() 
    { 
     // get current Language from somewhere 
     return names.GetValue(currentLanguage); 
    } 
} 

내 자바 약간 녹슨
<map name="names" table="names"> 
    <key column="categoryid" /> 
    <index column="language_id" /> 
    <element column="value"/> 
</map> 

<map name="descriptions" table="descriptions"> 
    <key column="categoryid" /> 
    <index column="language_id" /> 
    <element column="value" length="whatever"/> 
</map> 

, 구문

업데이트 수정 주시기 매핑 : 충분하다 간단한 문자열 맵에 대한 주석,

@ElementCollection 
@CollectionTable(name="TranslatedStrings", [email protected](name="names_category_id")) 
@Column(name="value") 
public Map<String, String> getNames() 

@ElementCollection 
@CollectionTable(name="TranslatedStrings", [email protected](name="descriptions_category_id")) 
@Column(name="value") 
public Map<String, String> getDescriptions() 


public String getCurrentName() 
{ 
    // get current Language from somewhere 
    return names.GetValue(currentLanguage.getCode()); 
} 
+0

2 개의 테이블이 없으며 TranslatedStrings 테이블 만 있습니다. – Burak

+0

http://stackoverflow.com/questions/6350415/internationalization-with-hibernate와 동일한 주제입니다. 그러나 나는 어떤 것도 삽입 할 수 없었다. 최대 절전 모드 : 범주 값()에 삽입 다음 오류 – Burak

+0

어떤 오류가 발생합니까? 이름, 메시지 및/또는 스택 추적이 도움이 될 것입니다. – Firo