Hibernate抛出HibernateQueryException:无法解析属性 [英] Hibernate throws HibernateQueryException: could not resolve property

查看:115
本文介绍了Hibernate抛出HibernateQueryException:无法解析属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  @Entity $ b $所以我有一张表,我在hibernate中定义了一个实体: b @Table(name =sec_Preference)
public class Preference {
private long id;
$ b @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;
$ b $ @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;
$ b @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;
}

私人长期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;
}

私人长期securityroleid;
$ b $ @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;
$ b @Column(name =PreferenceKey,nullable = false,insertable = true,updatable = true,length = 255,precision = 0)
@Basic
public String getKey (){
返回preferencekey;
}

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

private String preferencevalue;
$ b @Column(name =PreferenceValue,nullable = true,insertable = true,updatable = true,length = 255,precision = 0)
@Basic
public String getValue (){
返回preferencevalue;
}

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

}

当我试图写一个简单查询该表:

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

我得到以下错误:

  org.springframework.orm.hibernate3.HibernateQueryException:无法解析属性:dbgroupid:com.common.server.domain.sec.Preference;嵌套异常是org.hibernate.QueryException:无法解析属性:dbgroupid:com.common.server.domain.sec.Preference 

为什么不能在我的类中找出dbgroupid是什么?

解决方案

getter(和setter)不遵循javabeans约定。它应该是:

  public long getDbgroupId(){
return dbgroupid;
}

我的建议是 - 命名您的字段,然后使用您的IDE生成setters和getters。它将遵循公约。 (另一件事,这是一个偏好的问题,但在我看来,让一个班更容易阅读 - 注释你的领域,而不是获得者)


So I have a table that I've defined as an entity in hibernate like this:

@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;
}

}

When I tried to write a simple query against this table:

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

I got the following error:

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

Why can't hibernate figure out what dbgroupid is on my class?

解决方案

It's probably because your getter (and setter) is not following the javabeans convention. It should be:

public long getDbgroupId() {
    return dbgroupid;
}

What I'd suggest is - name your fields, and then use your IDE to generate setters and getters. It will follow the convention. (Another thing, that is a matter of preference, but in my opinion makes a class easier to read - annotate your fields, not getters)

这篇关于Hibernate抛出HibernateQueryException:无法解析属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆