Hacer que Hibernate ignore las variables de instancia que no están asignadas [duplicate]

3 minutos de lectura

avatar de usuario de hese
este

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

Columna desconocida ‘team1_.agencyName’ en ‘lista de campos’

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 muchos a muchos mapeo

@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?!

  • lo siento mucho…soy nuevo en esto. ¡Lo haré para todas mis publicaciones! gracias por decir

    – este

    12 de enero de 2011 a las 14:51

  • @Tunaki no, esto no es exactamente un duplicado de la pregunta “¿La forma más rápida de JPA de ignorar un campo durante la persistencia?” (stackoverflow.com/questions/1281952/…) Este ticket es sobre Hibernate, y el otro habla sobre JPA.

    – Yuci

    23 de marzo de 2017 a las 15:19

  • @hese, ¿su clase base tiene algunas variables? En caso afirmativo, ¿hibernate los ignora o los tiene en cuenta?

    – Shekhar Sahu

    28 de mayo de 2019 a las 16:38

avatar de usuario de skaffman
skaffman

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

@Transient
private String agencyName;

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

  • también puedes usar el modificador java transient en lugar de la anotación

    – pstantón

    4 de agosto de 2019 a las 23:54

  • ¿Es posible que la variable se ignore solo cuando persiste, pero al obtener los datos de la base de datos, el campo se puede tener en cuenta?

    – AbdelRahmane

    22 sep 2019 a las 19:04

  • Gracias a la respuesta de @ CodeMed a continuación, no importe el paquete incorrecto: import javax.persistence.Transient;

    – Infierno de dependencia

    19 de junio de 2020 a las 10:03

Avatar de usuario de CodeMed
CódigoMed

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

  • Gracias. Me preguntaba si deberían ser frijoles o persistencia.

    – Nasir

    10 de noviembre de 2014 a las 20:14

  • gracias, estaba usando org.springframework.data.annotation.Transient y estaba confundido por qué no funciona.

    – Rudy

    3 de agosto de 2017 a las 3:37

  • ¡¡¡gracias!!! gracioso, estaba pensando, ¿realmente necesito otra búsqueda en Google? La respuesta aceptada era tan probable…

    – Tomás

    5 de noviembre de 2018 a las 22:28

Avatar de usuario de Saumyaraj
Saumyaraj

Colocación @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;
    }

  • Poner @Transient en el nivel getter también funcionó para mí.

    – coretechie

    30 de marzo de 2017 a las 9:16

  • ¿No es diferente de declarar la variable @Transient?

    – ADTC

    23 de marzo de 2018 a las 0:36

  • @ADTC dependiendo de las bibliotecas utilizadas, algunos se resisten a las anotaciones en getter/setters, otros no (recientemente noté esto con Moxy y Jackson; Moxy es genial porque falla silenciosamente sin razón), a algunos no les gusta que se mezclen (entre propiedades y getter/setters). Voy a amarlo.

    – Shawn

    26/04/2018 a las 20:50


¿Ha sido útil esta solución?