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?!
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With