Je veux faire quelque chose comme ça:
@Entity public class Bar {
@Id @GeneratedValue long id;
List<String> Foos
}
et que les Foos persistent dans un tableau comme celui-ci:
foo_bars (
bar_id int,
foo varchar(64)
);
METTRE À JOUR:
Je sais comment cartographier d'autres entités, mais c'est souvent excessif. Il semble que ce que je suggère n'est pas possible sans créer une autre entité ou se retrouver avec tout dans une colonne blob.
Ceci est en termes Hibernate une "collection de valeurs" ou "éléments". Il existe une annotation (spécifique à Hibernate) pour cela. JPA ne le supporte pas (encore).
En bref, annotez votre collection comme ceci:
@CollectionOfElements
@JoinTable(
table=@Table(name="..."),
joinColumns = @JoinColumn(name="...") // References parent
)
@Column(name="...value...", nullable=false)
Cela créera la table nécessaire avec des clés étrangères et des restrictions.
Voici comment procéder si vous utilisez 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;
}
Pour un exemple plus clair, reportez-vous à la section 2.2.5.3.3 de le Guide de référence Hibernate Annotations .
Si vous stockez votre liste sous forme de tableau, cela fonctionne:
setFoos(String[] foos);
vous pouvez le transformer comme ça:
setFoos(myList.toArray(new String[myList.size()]));
Here 'Foos' is List of String, So it is unidirectional. We can do this in one model class using @ElementCollection annotation.
@Entity
@Table(name="bar")
public class Bar {
@Id @GeneratedValue
long id;
@ElementCollection
@JoinTable(
name="foo_bars",
joinColumns = @JoinColumn( name="bar_id")
)
@Column(name="foo")
List<String> Foos;
}
Dans la base de données bar_id est la clé étrangère dans la table foo_bars
créer une entité 'FooBars'
refactoriser l'attribut 'Aliments' à
@OneToMany List Foos
Je pense que c'est ce dont vous avez besoin:
@Entity
public class Bar {
@Id @GeneratedValue long id;
@OneToMany(mappedBy="bar") //"bar" = field name in mapping class
List<FooBar> Foos;
}
@Entity
public class FooBar {
@Id @GeneratedValue long id;
@ManyToOne
@JoinColumn(name="bar_Id")
Bar bar;
}