Заставьте hibernate игнорировать переменные класса, которые не отображаются
Я думал, что Hibernate принимает во внимание только переменные класса, которые помечены @Column
, Но странно, что сегодня, когда я добавил переменную (которая не сопоставлена ни с одним столбцом, а только с переменной, которая мне нужна в классе), он пытается включить эту переменную в оператор выбора в качестве имени столбца и выдает ошибку -
Неизвестный столбец "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;
@Column
аннотация является необязательной и позволяет переопределить автоматически сгенерированное имя столбца. Кроме того, length
атрибут @Column
используется только при автоматической генерации определений таблиц, это не влияет на время выполнения.
Для людей, которые находят эту публикацию через поисковые системы, другой возможной причиной этой проблемы является импорт неправильной версии пакета @Transient
, Убедитесь, что вы импортируете javax.persistence.transient
и не какой-то другой пакет.
Размещение @Transient
у меня на геттере с приватным полем работал.
private String name;
@Transient
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}