休止状態:地図二つの列をHashMapののキーと値に

トーマス・スタンプ:

私は翻訳を持つオブジェクトとデータベースを持っています。

2つのテーブルがあります持っているテーブルのオブジェクトidと複数のプロパティとテーブルがある「object_translation」object_idlanguage(varchar型)及びtranslation(varchar型)

私はこれをマッピングしたいと思います

public class Object {
    private Map<Language, String> translations
}

どこの言語は、コード内で列挙し、DB内の文字列です。

これは注釈で可能ですか?または私はどちらかを作成する必要がありますCollection<QuestionTranslation>(私はインターフェイスや注釈としてきれいに保つことを好むので、私は、春・データを使用しています)またはDAOで自分の休止状態マッピング関数を書きます

バージョン:スプリングブートスターターから提供休止有するばねブート2:

spring boot: <version>2.0.3.RELEASE</version>
<hibernate.version>5.2.17.Final</hibernate.version>
<hibernate-jpa-2.1-api.version>1.0.2.Final</hibernate-jpa-2.1-api.version>

これまでのところ私はこれを持っています:

@OneToMany
@JoinTable(name = "object_translation", joinColumns = {@JoinColumn(name = "object_id", referencedColumnName = "id")})
@MapKey(name = "language")
@MapKeyEnumerated(EnumType.STRING)
private Map<Language, String> translations;

しかし、どのように私は同様に値をマッピングしていますか?(明確化のために:文字列値は、DBにおける翻訳列でなければなりません)

私は主キーを持っていないので、これは理論的に可能でなければなりませんか?

前もって感謝します!

トーマス・スタンプ:

私はそれを修正するために管理=)

あなたは使用しないでください@OneToMany

私が使用したもの:

public class Object {

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "object_translation",
                 foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_object_translation_object"),
                 joinColumns = @JoinColumn(name = "object_id"))
    @MapKeyColumn(name = "language", nullable = false)
    @MapKeyEnumerated(EnumType.STRING)
    @Column(name = "translation", nullable = false)
    private Map<Language, String> translations;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=191179&siteId=1