У меня есть две таблицыHibernate: один ко многим связи, где положение
Table 1 (Parent)
parent_Id
Name
Table2 (Child)
child_Id
Name
Parent_id
version
Соответствующие классы
Class Parent
{
Int parentId;
String name;
Set<Child> childList;
@Id
@Column(name="PARENT_ID")
public int getParentId()
{
return parentId;
}
@Column(Name="NAME"
public String getName()
{
return name;
}
@OneToMany(mappedBy="parent",fetch=FetchType.EAGER)
@OrderBy("pareantId")
public Set<Child> getChildList()
{
return childList;
}
}
Class Child {
Int childId;
String name;
Parent parent;
int age;
@Id
@Column(name="CHILD_ID")
public int getId()
{
return childId;
}
@Column(Name="NAME"
public String getName()
{
return name;
}
@ManyToOne
@JoinColumn(name = "PARENT_ID", nullable = false)
public A getParent()
{
return parent;
}
public getAge()
{
return age;
}
} Это мой DAO класс, который работает нормально, если я просто использовать в запросе (от родителя, где parentId = 1).
@Transactional
public Parent getParentBy(int id)
{
Parent parent = null;
Session session = this.sessionFactory.getCurrentSession();
try{
parent =(Parent) session.createQuery("from Parent where parentId=?).setParameter(0,id).uniqueResult();
} catch (Exception e)
{
e.printStackTrace();
}
return parent;
}
Когда я запускаю это, я получаю все дочерние элементы под этим родителем в наборе.
Теперь, что мне нужно сделать, если я хочу добавить предложение where для возраста в том же запросе выше? Возможно ли это? Можем ли мы написать, как этот
from Parent as a where a.parentId=? and a.childList.age> 10
Логически это doen't выглядеть правильным. Любая помощь будет оценена.
Thanks
Он смотрит прямо на меня. Это ошибка? В чем вас беспокоит? – Rafa
Я получаю эту ошибку org.hibernate.QueryException: незаконная попытка разыменования коллекции [parent0_.ID.childList] с ссылкой на свойство свойства [age] [from com.test.hibernate.Parent как где a.parentId =? и a.childList.age = 10] – Jha