У меня возникло несколько проблем с программированием на Java. В моем случае я использую запросы к критериям Hibernate через Spring getHibernateTemplate
без прямого доступа к объекту сеанса.Передача ссылки объекта на анонимный класс
У меня есть отношения родитель-ребенок, сопоставленные с аннотациями JPA. Вот мой метод DAO
public List<Child> findByParent(final Parent parent)
{
return getHibernateTemplate().executeFind(new HibernateCallback<List<Child>>()
{
@Override
public List<Child> doInHibernate(Session session) throws HibernateException, SQLException
{
return session.createCriteria(Child.class)
.add(Restrictions.eq("parent", parent))
.list();
}
});
}
я пометил parent
как окончательные, потому что я передаю его анонимный класс. Когда я запускаю код, Hibernate выполняет запрос (... where parentId = ?
), но я не получаю никакого результата. Запуск его в mysql с правильным parentId
возвращает результаты.
При отладке я вижу, что Eclipse не может проверить значение parent
из анонимного класса. Что не так? Как это исправить?
[edit] Вот Pojo. Я не имею никакого контроля над Родителем (даже не источником, я просто нажал F3 для автоматических декомпилировать)
@Entity
@SequenceGenerator(name = "SEQ_STORE", sequenceName = "SEQ_CHILD")
@Table(name = "TA_CHILD", uniqueConstraints = { @UniqueConstraint(columnNames = { "A_FIELD", "PARENT_ID" }) })
public class Immobile
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CHILD_ID")
protected int id;
@JoinColumn(name = "PARENT_ID")
@ManyToOne(fetch = FetchType.LAZY, optional = false, targetEntity = Organization.class)
protected Parent parent;
@GeneratedValue
@Column(name = "PARENT_ID", insertable = false, updatable = false)
protected String parentId;
}
// Compiled from Parent.java (version 1.6 : 50.0, super bit)
@javax.persistence.Entity
@javax.persistence.Table(name="TA_PARENT")
public class org.Partent extends org.ExtensibleBase implements java.io.Serializable {
// Field descriptor #161 J
private static final long serialVersionUID = 1L;
// Field descriptor #166 Ljava/lang/String;
@javax.persistence.Id
@javax.persistence.Column(name="PARENT_ID",
nullable=false,
length=(int) 20)
private java.lang.String id;
}
Можете ли вы опубликовать вам POJO, Child.java и Parent.java –
'parent' не быть" прошел "где угодно. Скорее, «родитель» * захвачен * анонимным классом. – newacct