2012-01-14 19 views
3

私はid、name、description属性を持つCategoryクラスを持っています。多言語サポートのためのHibernateマッピング

多言語対応名前と説明を入力して保存することができます。

クラスの構造とハイバネートマッピングはどのようなものでしょうか?

これは注釈付きの私のコードです。しかし、私は、データベースには何も挿入できませんでした: translated_string:TID、テキスト、langCode カテゴリ:

@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; 
} 

} 

は、私は2つのテーブル持って :ID、NAME_IDを、私はこの情報メッセージを取得しています

をdescription_id Hibernate:hibernateTemplateでカテゴリを保存するときにカテゴリ値( )に挿入します。

そして、私はIDでカテゴリを検索したい場合は、私のtranslated_stringテーブルはCATEGORY_IDまたはname_KEYフィールドを持っていないので、それは

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

を十分なはずである単純な文字列マップの注釈、良い質問!私の推測では、各言語に1つの索引を作成する必要があるということです(それらを混在させたくない場合)。マッピングについては考えていません。おそらく、マッピングファイルで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> 

私のJavaは少し錆びている、構文

アップデートを修正して自由に感じる:

@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

関連する問題