java - inversejoincolumns - Asigne una lista de cadenas con anotaciones JPA/Hibernate
save many to many jpa (5)
Aquí es cómo lo haría si está utilizando 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;
}
Para un ejemplo más claro, consulte la sección 2.2.5.3.3 en la Guía de referencia de anotaciones de Hibernate .
Quiero hacer algo como esto:
@Entity public class Bar {
@Id @GeneratedValue long id;
List<String> Foos
}
y que los Foos persistan en una mesa como esta:
foo_bars (
bar_id int,
foo varchar(64)
);
ACTUALIZAR:
Sé cómo mapear otras entidades, pero es excesivo en muchos casos. Parece que lo que sugiero no es posible sin crear otra entidad o terminar con todo en alguna columna de blob.
Creo que es eso lo que necesitas:
@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;
}
Esto es en términos de Hibernate una "colección de valores" o "elementos". Hay una anotación (específica de Hibernate) para ello. JPA no es compatible con esto (todavía).
En resumen, anota tu colección de esta manera:
@CollectionOfElements
@JoinTable(
table=@Table(name="..."),
joinColumns = @JoinColumn(name="...") // References parent
)
@Column(name="...value...", nullable=false)
Esto creará la tabla necesaria con claves externas y restricciones.
Si almacena su lista como una matriz, funciona:
setFoos(String[] foos);
puedes transformarlo así:
setFoos(myList.toArray(new String[myList.size()]));
crear una entidad ''FooBars''
refactorizar el atributivo ''Foos'' a
@OneToMany List Foos