トーマス・スタンプ:
私は翻訳を持つオブジェクトとデータベースを持っています。
2つのテーブルがあります持っているテーブルのオブジェクトid
と複数のプロパティとテーブルがある「object_translation」object_id
、language
(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;
}