【问题标题】:Hibernate: could not read column value from result set:Fail to convert to internal representation休眠:无法从结果集中读取列值:无法转换为内部表示
【发布时间】:2013-09-04 06:31:05
【问题描述】:

我正在尝试从数据库中获取值。我已经成功配置休眠。下面是我的 hbm 文件和 pojo 类。

<class name="UserMasterBean" table="EMPLOYEE_MASTER">
    <id name="Id" type="long">
        <column name="EMP_ID" length="10" />
        <generator class="assigned" />
    </id>
    <property name="FirstName" type="string">
        <column name="EMP_FIRST_NAME" length="30" not-null="true" />
    </property>
    <property name="SecondName" type="string">
        <column name="EMP_SECOND_NAME" length="30" />
    </property>
    <property name="LastName" type="string">
        <column name="EMP_LAST_NAME" length="30" />
    </property>

    <property name="empDob" type="date">
        <column name="EMP_DOB" length="7" not-null="true" />
    </property>
    <property name="empDoj" type="date">
        <column name="EMP_DOJ" length="7" not-null="true" />
    </property>
    <property name="empPermAdd1" type="string">
        <column name="EMP_PERM_ADD1" length="50" not-null="true" />
    </property>
<!--Other Properties removed-->

下面是我的 pojo 课

public class UserMasterBean {

private Long id;
private String loginName;
private String password;
private String type;
private String loginYN;
private String salutation;
private String firstName;
private String secondName;
private String lastName;
private String gender;
private String maritalStatus;
private String pagerNo;
private String phoneNo;
private String mobileNo;
private String emailId;
private String personalMailId;
private Long companyId;
private String companyName;
private Long worldWideRegion;
private Long country;
private Long localRegion;
private Long state;
private Long city;
private Long department;
private String curriculum;
private String dn;
private String photoPath;
private java.sql.Timestamp empDob;
private java.sql.Timestamp empDoj;
private java.sql.Timestamp empDol;
private java.sql.Timestamp empDoc;
private String empPanNo;
private String empBloodGroup;
private String empCurrcBand;
private String empPassportNo;
private String empManager;


public String getFieldPrefix() {
    return fieldPrefix;
}

public Long getId() {
    return id;
}

public String getLoginName() {
    return loginName;
}

public String getPassword() {
    return password;
}

public String getType() {
    return type;
}

public String getLoginYN() {
    return loginYN;
}

public String getSalutation() {
    return salutation;
}

public String getFirstName() {
    return firstName;
}

public String getSecondName() {
    return secondName;
}

public String getLastName() {
    return lastName;
}
/* Amit Gupte - Modified - IUser Begin */

public String getMiddleName() {
    return secondName;
}

public String getName() {
    return firstName + " " + lastName;
}
/* Amit Gupte - Modified - IUser End*/

public String getGender() {
    return gender;
}

public String getMaritalStatus() {
    return maritalStatus;
}

public String getPagerNo() {
    return pagerNo;
}

public String getPhoneNo() {
    return phoneNo;
}

public String getMobileNo() {
    return mobileNo;
}

public String getEmailId() {
    return emailId;
}

public String getPersonalMailId() {
    return personalMailId;
}

public Long getCompanyId() {
    return companyId;
}

public String getCompanyName() {
    return companyName;
}

public Long getWorldWideRegion() {
    return worldWideRegion;
}

public Long getCountry() {
    return country;
}

public Long getLocalRegion() {
    return localRegion;
}

public Long getState() {
    return state;
}

public Long getCity() {
    return city;
}

public Long getDepartment() {
    return department;
}

public String getCurriculum() {
    return curriculum;
}

public String getDn() {
    return dn;
}

public String getPhotoPath() {
    return photoPath;
}

public java.sql.Timestamp getEmpDob() {
    return empDob;
}

public java.sql.Timestamp getEmpDoj() {
    return empDoj;
}

public java.sql.Timestamp getEmpDol() {
    return empDol;
}

public java.sql.Timestamp getEmpDoc() {
    return empDoc;
}

public String getEmpPanNo() {
    return empPanNo;
}

public String getEmpBloodGroup() {
    return empBloodGroup;
}

public String getEmpCurrcBand() {
    return empCurrcBand;
}

public String getEmpPassportNo() {
    return empPassportNo;
}

public String getEmpManager() {
    return empManager;
}



//Other methods removed

}

我面临以下错误。

Sep 04, 2013 11:50:19 AM org.hibernate.type.NullableType nullSafeGet
INFO: could not read column value from result set: EMP1_0_; Fail to convert to internal           representation
Sep 04, 2013 11:50:19 AM org.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 17059, SQLState: 99999
Sep 04, 2013 11:50:19 AM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: Fail to convert to internal representation

我没有发现我的代码有什么问题。

我查询为

String hql = "from UserMasterBean";
    List empList = attendance.getList(hql, factory);

对于其他类它的工作

【问题讨论】:

  • 可能会发布有用的代码查询部分...而不是 pojo
  • 这是我的查询 String hql = "from UserMasterBean"; List empList = admission.getList(hql, factory);
  • 需要更多详细信息才能为您提供准确的答案,但请查看正在加载的数据。您标记为非空的列之一似乎存在空值。

标签: java hibernate


【解决方案1】:

当为不是数字的字符串表示形式的 VARCHAR 值调用 getInt(或其他一些数字类型)时,将引发此错误。如果 VARCHAR 列包含“BOB”并且您对该列调用 getInt,则会收到此错误。

【讨论】:

  • 问题已解决。定义类型有问题。在数据库中它是 varchar 但在 pojo 中定义时我使用了 Long。谢谢。
  • 在我的例子中,它是一个 Enum,我忘记用 @Enumerated(EnumType.STRING) 注释,所以它试图 getInt,这是 Enums 的默认值...我总是忘记 u.u
  • 这个来自不同帖子的错误非常指出数据类型映射存在一些问题。我只是在查看实体的 id,但是有一个带有布尔表示的字段我忘了添加转换类型。我在我试图给出布尔值但没有给出类型的实体中将数据库数据类型作为char,因此我得到了错误。定义类型为我解决了这个问题。 @Type(type="yes_no")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2013-10-02
  • 1970-01-01
相关资源
最近更新 更多