-1

자바 프로그래밍에 몇 가지 문제가 있습니다. 필자의 경우, 세션 객체에 직접 액세스하지 않고 Spring의 getHibernateTemplate을 통해 Hibernate criteria 쿼리를 사용하고있다.익명 클래스에 객체 참조 전달하기

JPA 주석으로 매핑 된 부모 - 자식 관계가 있습니다. 저는 여기에 익명의 클래스에 전달 해요 때문에 나는 마지막으로 parent을 표시 한

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

내 DAO 방법입니다. Hibernate 코드를 실행하면 (... where parentId = ?) 쿼리를 수행하지만 아무 결과도 얻지 못합니다. mysql에서 정확히 parentId을 실행하면 결과가 반환됩니다.

디버깅 할 때 Eclipse가 익명 클래스에서 parent의 값을 검사 할 수 없음을 알았습니다. 뭐가 문제 야? 이 문제를 어떻게 해결할 수 있습니까?

[편집] 여기는 Pojo가 있습니다. 내가 부모를 통제 없다

@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 기준을 추가해야합니다 (심지어 소스를 그냥 자동 컴파일에 대한 F3를 누름)

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 's)이 정확하고 모든 결과를 반환합니다.

문제가 해결하지만 이클립스가 범위를 벗어 parent 변수를 평가 할 수없는 것을 설명하지 않습니다