221 votes

Comment faire pour que hibernate ignore les variables de classe qui ne sont pas mappées!

Je pensais que hibernate prend en compte que des variables de classe qui sont annotés avec @Colonne. Mais étrangement, aujourd'hui, quand j'ai ajouté une variable (qui n'est pas mappé à une colonne, juste une variable dont j'ai besoin dans la classe), il est tentant d'inclure cette variable dans l'instruction select, comme un nom de colonne et le jette dans l'erreur

Unknown column 'team1_.agencyName' in 'field list'

Ma classe -

@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.

}

Pour info...je le classe dans une autre classe avec de nombreux de nombreux de la cartographie

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

Pourquoi est-ce qui se passe?!

472voto

skaffman Points 197885

JPA utilisera toutes les propriétés de la classe, à moins que vous ne les marquiez spécifiquement avec @Transient :

 @Transient
private String agencyName;
 

L'annotation @Column est purement facultative et permet de remplacer le nom de colonne généré automatiquement. De plus, l'attribut length de @Column n'est utilisé que lors de la génération automatique de définitions de table, il n'a aucun effet sur le runtime.

95voto

CodeMed Points 587

Pour les personnes qui trouvent cette publication via les moteurs de recherche, une autre cause possible de ce problème est liée à l'importation de la version de package incorrecte de @Transient . Assurez-vous d'importer javax.persistence.transient et pas un autre package.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X