-1

我在Java编程中遇到了一些麻烦。就我而言,我通过Spring的getHibernateTemplate使用Hibernate条件查询,而无需直接访问会话对象。将对象引用传递给匿名类

我有一个用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 = ?),但我没有得到任何结果。在正确的parentId中运行它将返回结果。

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

这里是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; 

} 
+0

能否请您发表您的POJO Child.java和Parent.java –

+0

'parent'是不是被“通过“任何地方。相反,“父母”被匿名类别捕获*。 – newacct

回答

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(); 
       } 
      }); 
     } 
0

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

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

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