2010-12-14 5 views
8

그래서 나는이 같은 최대 절전 모드에서 엔티티로 정의한 테이블이 있습니다Hibernate는 HibernateQueryException를 던졌습니다 : 특성을 확인할 수 없습니다

:이 테이블에 대한 간단한 쿼리를 작성하려고

@Entity 
@Table(name = "sec_Preference") 
public class Preference { 
private long id; 

@Column(name = "PreferenceId", nullable = false, insertable = true, updatable = true, length = 19, precision = 0) 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Id 
public long getId() { 
    return id; 
} 

public void setId(long id) { 
    this.id = id; 
} 

private long systemuserid; 

@Column(name = "SystemUserId", nullable = true, insertable = true, updatable = true, length = 19, precision = 0) 
@Basic 
public long getSystemUserId() { 
    return systemuserid; 
} 

public void setSystemUserId(long systemuserid) { 
    this.systemuserid = systemuserid; 
} 

private long dbgroupid; 

@Column(name = "DBGroupId", nullable = true, insertable = true, updatable = true, length = 19, precision = 0) 
@Basic 
public long getDBGroupId() { 
    return dbgroupid; 
} 

public void setDBGroupId(long dbgroupid) { 
    this.dbgroupid = dbgroupid; 
} 

private long externalgroupid; 

@Column(name = "ExternalGroupId", nullable = true, insertable = true, updatable = true, length = 19, precision = 0) 
@Basic 
public long getExternalGroupId() { 
    return externalgroupid; 
} 

public void setExternalGroupId(long externalgroupid) { 
    this.externalgroupid = externalgroupid; 
} 

private long securityroleid; 

@Column(name = "SecurityRoleId", nullable = true, insertable = true, updatable = true, length = 19, precision = 0) 
@Basic 
public long getSecurityRoleId() { 
    return securityroleid; 
} 

public void setSecurityRoleId(long securityroleid) { 
    this.securityroleid = securityroleid; 
} 

public void setEnum(com.vitalimages.common.server.security.Preference pref) { 
    this.preferencekey = pref.name(); 
} 

private String preferencekey; 

@Column(name = "PreferenceKey", nullable = false, insertable = true, updatable = true, length = 255, precision = 0) 
@Basic 
public String getKey() { 
    return preferencekey; 
} 

public void setKey(String key) { 
    this.preferencekey = key; 
} 

private String preferencevalue; 

@Column(name = "PreferenceValue", nullable = true, insertable = true, updatable = true, length = 255, precision = 0) 
@Basic 
public String getValue() { 
    return preferencevalue; 
} 

public void setValue(String value) { 
    this.preferencevalue = value; 
} 

} 

org.springframework.orm.hibernate3.HibernateQueryException: could not resolve property: dbgroupid of: com.common.server.domain.sec.Preference; nested exception is org.hibernate.QueryException: could not resolve property: dbgroupid of: com.common.server.domain.sec.Preference 

왜 난을 dbgroupid 어떤 그림을 최대 절전 모드 수 없습니다

public Collection<Preference> getPreferencesForDBGroup(long dbgroupId) { 
    final DetachedCriteria criteria = DetachedCriteria.forClass(Preference.class) 
      .add(Restrictions.eq("dbgroupid", dbgroupId)) 
      .setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE); 

    return getHibernateTemplate().findByCriteria(criteria); 
} 

나는 다음과 같은 오류가 발생했습니다 수업 시간에?

답변

14

getter (및 setter)가 javabeans 규칙을 따르지 않았기 때문일 수 있습니다.

public long getDbgroupId() { 
    return dbgroupid; 
} 

은 내가 좋을 것 것은 - 당신의 필드 이름을 지정한 다음 세터와 게터를 생성하기 위해 IDE를 사용 : 그것은해야합니다. 그것은 대회를 따를 것입니다. (또 다른 것은 우선 순위의 문제이지만 내 의견으로는 클래스를 읽기 쉽도록 만든다. getter가 아닌 필드에 주석을 달아 준다)

+0

@Ralph - 네, 금지되어 있지 않습니다. 하지만 필자는 그의 필드 이름을 출발점으로 삼았으므로 필자는 게터 변경을 제안했습니다. 그것은 다른 방향이었을 수 있습니다. 그러나 처음에는 여러 개의 대문자가 까다 롭습니다. – Bozho

+0

당신은 맞습니다 - 당신의 anser를 놓치지 마십시오 - 그래서 이미 내 의견을 삭제합니다. – Ralph

+0

나는 모두 대문자를 사용하고 있었고 올바른 getter를 찾지 못하는 유사한 문제가있었습니다 : .add (Restrictions.eq ("DBGROUPID", dbgroupId))' –

2

"dbgroupid"가 아닌 "DBGroupId"라고 레이블을 지정했을 수 있습니다.

+0

getXXX 메서드에서 선언했기 때문에 그런가요? 그리고 그것이 자본화를 얻는 곳입니까? –

5

글쎄 나는 이것에 관해 약간의 진전을 보였지만 여전히 최대 절전 모드가 그 이름을 얻는 곳을 이해하지 못한다. 나는 최대 절전 모드의 내장으로 디버깅과 다음 클래스 발견 : 객체에 대한 기준에 주어진 이름을 확인하려고

public Type toType(String propertyName) throws QueryException { 
    Type type = (Type) typesByPropertyPath.get(propertyName); 
    if (type == null) { 
     throw propertyException(propertyName); 
    } 
    return type; 
} 

: 방법이이 클래스에서

org.hibernate.persister.entity.AbstractPropertyMapping 

합니다. 여기

id -> [email protected] 
key -> [email protected] 
value -> [email protected] 
systemUserId -> [email protected] 
securityRoleId -> [email protected] 
externalGroupId -> [email protected] 
DBGroupId -> [email protected] 

당신이 DBGroupId의 총액은 내 기준으로 한 일치하지 않은 것을 알 수 있습니다 다음 typesByPropertyPath 맵 그래서 나는 다음과 같은 값을 발견했다. 그래서 dbgroupid에서 DBGroupId로 변경했습니다 :

public Collection<Preference> getPreferencesForDBGroup(long dbgroupId) { 
    final DetachedCriteria criteria = DetachedCriteria.forClass(Preference.class) 
      .add(Restrictions.eq("DBGroupId", dbgroupId)) 
      .setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE); 

    return getHibernateTemplate().findByCriteria(criteria); 
} 

이제 작동합니다.

관련 문제