Заставить 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;
}


почему это происходит?!

513   3  

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

    Ничего не найдено.