-1

我在 Java 编程方面遇到了一些麻烦。就我而言,我通过 Spring 使用 Hibernate 条件查询,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为 final,因为我将其传递给匿名类。当我运行代码时,Hibernate 确实执行了查询(... where parentId = ?)但我没有得到任何结果。在 mysql 中以正确的parentId返回结果运行它。

调试时,我看到 Eclipse 无法检查parent匿名类中的值。怎么了?我该如何解决?

[编辑] 这里是 Pojo。我无法控制 Parent(甚至没有源代码,我只是按 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;

}
4

2 回答 2

0

在限制中,您必须为父实体的 id 添加条件试试下面的代码,

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.id", parent.getId()))
                            .list();
                }
            });
        }
于 2013-06-18T09:19:33.270 回答
0

代码没有问题。简单地说,从 MySQL 工作台填充表后,我忘记提交事务或启用自动提交。

两个片段(我的和 Pritesh 的)都是正确的并返回所有结果。

问题已解决,但这并不能解释 Eclipse 无法评估parent超出范围的变量

于 2013-06-18T09:26:53.217 回答