Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make hibernate ignore class variables that are not mapped [duplicate]

I thought hibernate takes into consideration only class variables that are annotated with @Column. But strangely today when I added a variable (that is not mapped to any column, just a variable i need in the class), it is trying to include that variable in the select statement as a column name and throws the error -

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

My class -

@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...I use the above class in another class with many to many mapping

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

Why is this happening?!

like image 331
hese Avatar asked Jan 11 '11 20:01

hese


2 Answers

JPA will use all properties of the class, unless you specifically mark them with @Transient:

@Transient private String agencyName; 

The @Column annotation is purely optional, and is there to let you override the auto-generated column name. Furthermore, the length attribute of @Column is only used when auto-generating table definitions, it has no effect on the runtime.

like image 67
skaffman Avatar answered Sep 17 '22 08:09

skaffman


For folks who find this posting through the search engines, another possible cause of this problem is from importing the wrong package version of @Transient. Make sure that you import javax.persistence.transient and not some other package.

like image 43
CodeMed Avatar answered Sep 17 '22 08:09

CodeMed