я разрабатываю некоторые улучшения в устаревшей системе,
У меня такой класс
class MyPersistentClazz
{
private String aTPlace;
public void setATPlace(.......){......}//yes mistyping
@Column(name="atPlaceOrder")
public String getATPlace(){return aTPlace;}
}
они обычно загружают этот класс, используя эти методы
final MyPersistentClazz clazz = (MyPersistentClazz)session.createCriteria(MyPersistentClazz.class).add(idEq(id)).uniqueResult();
и используя методы загрузки и получения, и работает нормально.
но проблема возникает, когда я использую проекции.
final Projection p=Projections.projectionList().add(Projections.property("d.aTPlace"),"aTPlace");
бросает
Exception in thread "main" org.hibernate.QueryException: could not resolve property:
мой вопрос...
при использовании прогнозов, я думаю, что Hibernate вызывает сеттер каждого свойства, это утверждение ОК?
при использовании критериев.uniqueResult или загрузить или получить Hibernate использовать отдельный доступ к свойствам поля?
или почему работает с некоторыми и не работает с другими с тем же сеттером?
мы используем только аннотации, а не XML.
большое спасибо.
Как Hibernate работает с вашим bean-компонентом, зависит от того, как вы его аннотировали. Если вы аннотируете переменные экземпляра, то Hibernate будет использовать прямую инъекцию и обходить ваши методы Set. В противном случае он будет использовать ваши методы Set.
Может быть, это неправильное преобразование имени вашего свойства в имя метода Set? Попробуйте изменить имя свойства на нечто более простое (без этой серии заглавных букв) и убедитесь, что случай свойства в вашей проекции правильный.