many inversejoincolumns intermediate example java hibernate jpa annotations

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