Заставить hibernate игнорировать переменные класса, которые не сопоставлены [дубликат]
этот вопрос уже есть ответ здесь:
Я думал, что спящий принимает во внимание только переменные класса, которые аннотируются @Column. Но странно сегодня, когда я добавил переменную (которая не сопоставляется ни с одним столбцом, просто переменная мне нужно в классе), он пытается включить эту переменную в инструкцию select в качестве имени столбца и выдает ошибку -
неизвестный столбец ' team1_.agencyName' в 'список полей'
мой класс -
@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.
}
к вашему сведению...Я использую вышеуказанный класс в другом классе со многими ко многим отображением
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name="user_team",
joinColumns = { @JoinColumn( name="user_id") },
inverseJoinColumns = @JoinColumn( name="team_id")
)
public Set<Team> getTeams() {
return teams;
}
почему это происходит?!
3 ответов:
JPA будет использовать все свойства класса, если вы специально не пометите их с
@Transient:@Transient private String agencyName;The
@Columnаннотация является чисто необязательной и позволяет переопределить автоматически сгенерированное имя столбца. Кроме того, на@Columnиспользуется только при автоматическом создании определений таблиц, он не влияет на время выполнения.
для людей, которые находят эту публикацию через поисковые системы, другая возможная причина этой проблемы заключается в импорте неправильной версии пакета
@Transient. Убедитесь, что вы импортируетеjavax.persistence.transientи не какой-то другой пакет.
помещения
@Transientна геттере с частным полем работал для меня.private String name; @Transient public String getName() { return name; } public void setName(String name) { this.name = name; }
Comments