Map a list of strings with JPA/Hibernate annotations

This is in Hibernate terms a "collection of values" or "elements". There is a (Hibernate specific) annotation for it. JPA does not support this (yet).

In short, annotate your collection like this:

@CollectionOfElements
@JoinTable(
        table=@Table(name="..."),
        joinColumns = @JoinColumn(name="...") // References parent
)
@Column(name="...value...", nullable=false)

This will create the necessary table with foreign keys and restrictions.


Here is how you would do this if you are using JPA2:

@Entity public class Bar {
   @Id @GeneratedValue long id;

   @ElementCollection
   @CollectionTable(name="foo_bars", joinColumns=@JoinColumn(name="bar_id"))
   @Column(name="foo")
   List<String> Foos;
 }

For a clearer example see section 2.2.5.3.3 in the Hibernate Annotations Reference Guide.


If you store your list as an array, it works:

setFoos(String[] foos);

you can transform it like this:

setFoos(myList.toArray(new String[myList.size()]));