I want to do something like this:
@Entity public class Bar {
@Id @GeneratedValue long id;
List<String> Foos
}
and have the Foos persist in a table like this:
foo_bars (
bar_id int,
foo varchar(64)
);
UPDATE:
I know how to map other entities, but it's overkill in many cases. It looks like what I'm suggesting isn't possible without creating yet another entity or ending up with everything in some blob column.
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.
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.
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()]));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With