2017-07-14 4 views
0

私は、MySQLデータベースからデータを取得するためにSpringと注釈駆動のHibernateを使用しています。私は、MySQLに配列を格納することはできませんHibernate:フィールドとしてのMySQLの行(配列/リスト)

@Entity 
@Table(name="person") 
public class Person implements Serializable{ 

    @Id 
    String name; 

    //other fields 

    String[] languages; 

    //getters and setters 
} 

ので、私はすでに2つのテーブルを作成:

私のJavaクラス

|name|*other columns*|

言語|name|lang1|lang2|lang3|

すべてを値はvarchars(一部のlangXはnull)で、nameは両方の表の主キーです。

値(lang1、lang2、lang3)を配列として取得するか、PersonオブジェクトにList<String>を入れる必要があります。私はすでにsession.createQuery("from Person where name=:name inner join languages.name as name");を試しましたが、それは簡単ではありません。

私は助けていただければ幸いです。前もって感謝します!

+0

DBデザインを変更するのが最も簡単です(lang1、lang2などのフィールドに番号が付けられているとヒントが出る可能性があります)。多対多の関係を調べます。 – litelite

+0

私がやったことが本当に馬鹿だと気づいた、ありがとう!その多対多テーブルを持つことで、@ElementCollectionを使用してそれらの文字列をリストに集めました。 –

答えて

0

あなたはこれが別の言語テーブルを維持するであろうし、それは、Personテーブルに関連

@Entity(name="LANGUAGE_TABLE") 
public class Language { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="LANUAGE_ID") 
    private int languageId; 
    @Column 
    private String languageName; 
    //getters & setters 
} 

を次のように

@OneToMany(cascade=CascadeType.PERSIST)//A one to many relationship 
    private Collection<Language> languages = new ArrayList<>(); 

あなたは言語のクラスを持つことができ、あなたのPersonクラスで、次のようなものを使用することができます。文字列を直ちに格納するのは良い考えではありません。

このスキーマでは、データが整理されます。

関連する問題