2013-06-09 6 views
2

최대 절전 모드 4를 사용할 때 몇 가지 질문이있다. 양방향 매핑 인 POJO도있다. 상위 카테고리에서 하위 카테고리 목록을 가져올 수는 있지만 하위 카테고리에서 상위 카테고리를 가져올 수 없습니다.하이버 네이트 양방향 다 대일 매핑은 자식 객체로부터 부모 객체를 가져올 수 없다.

@Entity 
public class Category { 

private Long id; 
private String cateName; 
private String cateType; 
private String description; 
private List<Category> childCategories; 
private Category category; 

public Category() { 
    childCategories = new ArrayList<Category>(); 
} 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
public Long getId() { 
    return id; 
} 
public void setId(Long id) { 
    this.id = id; 
} 

@ManyToOne 
@JoinColumn(name="parent_id", referencedColumnName="id") 
public Category getCategory() { 
    return category; 
} 

public void setCategory(Category category) { 
    this.category = category; 
} 

public String getCateName() { 
    return cateName; 
} 
public void setCateName(String cateName) { 
    this.cateName = cateName; 
} 
public String getCateType() { 
    return cateType; 
} 
public void setCateType(String cateType) { 
    this.cateType = cateType; 
} 
public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

@OneToMany(mappedBy = "category") 
public List<Category> getChildCategories() { 
    return childCategories; 
} 

public void setChildCategories(List<Category> childCategories) { 
    this.childCategories = childCategories; 
} 

@Override 
public String toString() { 
    return "Category [id=" + id + ", cateName=" + cateName + ", cateType=" 
      + cateType + ", description=" + description + "]" + "Parent: " + category; 
} 

} 

그것은 정상적인 중첩 된 카테고리 매핑입니다 : 여기 내 코드입니다. category.getChildCategories()을 사용하면 일반적으로 자식 목록을 얻을 수 있지만 category.getCategory()을 사용하면 부모 개체에만 ID가 포함되고 다른 개체는 null이됩니다 (예 : [id=7, cateName='Java', cateType='2', description='java category', category=[id='2', cateName=null, cateType=null, description=null, category= null]]). 루트까지 모든 부모 객체를 가져 오는 방법? 정말로 당신의 도움이 필요합니다, 고마워요! 추가 : category이 방법으로 검색됩니다 : 1.
일시적인 객체에게 그것을 유지하는 category
2. saveOrUpdate() 방법을 만듭니다.
3. getIdentifier()을 사용하여 추가 된 카테고리의 ID를 반환하십시오.
4.이 범주 개체를 즉시 검색하려면 get()을 사용하십시오.
그래서 나는 그것이 지속 된 객체를 즉시 검색 할 때 hibernate가 캐시 된 영속 객체를 반환했다면 어떻게 될까?

+0

생성 된 쿼리를 살펴 보았습니까? – aksappy

+0

이상한데 쿼리가 생성되지 않았습니다. : –

+0

show_sql 플래그가 true로 설정되어 있는지 확인하십시오. 이상적으로 로그에 표시된 매핑 정보가 최소한이어야합니다. 또한 saveOrUpdate()를 수행 한 후 식별자를 가져 오기 전에 플러시를 수행합니까? – aksappy

답변

0

saveOrUpdate() 메서드를 호출 한 후에는 식별자를 얻은 후 evict()을 호출해야합니다.

무효 org.hibernate.Session.evict (Object 객체)
세션 캐시에서이 인스턴스를 제거합니다. 인스턴스에 대한 변경 사항은 데이터베이스와 동기화되지 않습니다. 이 작업은 연결이 cascade = "evict"로 매핑 된 경우 연결된 인스턴스 에 계단식으로 연결됩니다.