persistencia mapeo ejemplo con attribute anotaciones annotation java hibernate jpa

java - ejemplo - mapeo hibernate con anotaciones



Hacer que hibernate ignore las variables de clase que no están mapeadas (3)

JPA utilizará todas las propiedades de la clase, a menos que las marque específicamente con @Transient :

@Transient private String agencyName;

La anotación @Column es puramente opcional y está ahí para permitirle anular el nombre de la columna generada automáticamente. Además, el atributo de length de @Column solo se usa cuando se generan automáticamente definiciones de tabla, no tiene efecto en el tiempo de ejecución.

Esta pregunta ya tiene una respuesta aquí:

Pensé que hibernate toma en consideración solo las variables de clase que están anotadas con @Column . Pero extrañamente hoy cuando agregué una variable (que no está mapeada en ninguna columna, solo una variable que necesito en la clase), está tratando de incluir esa variable en la declaración de selección como un nombre de columna y arroja el error -

Columna desconocida ''team1_.agencyName'' en ''lista de campo''

Mi clase -

@Entity @Table(name="team") public class Team extends BaseObject implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(length=50) private String name; @Column(length=10) private String code; @Column(name = "agency_id") private Long agencyId; private String agencyName; //note: not annotated. }

FYI ... Utilizo la clase anterior en otra clase con mapeo de muchos a muchos

@ManyToMany(fetch = FetchType.EAGER) @JoinTable( name="user_team", joinColumns = { @JoinColumn( name="user_id") }, inverseJoinColumns = @JoinColumn( name="team_id") ) public Set<Team> getTeams() { return teams; }

¡¿Por qué está pasando esto?!


Para las personas que encuentran esta publicación a través de los motores de búsqueda, otra posible causa de este problema es la importación de la versión del paquete incorrecta de @Transient . Asegúrese de importar javax.persistence.transient y no algún otro paquete.


Poner @Transient en getter con campo privado funcionó para mí.

private String name; @Transient public String getName() { return name; } public void setName(String name) { this.name = name; }