今天做一个查看的功能,业务非常简单,就是点击列表中的一条数据,查看该数据的详细信息。但是,查数据详细信息时候调用hibernate的session.get(entityClass, pk);却出了这个错误。
ChinafairProjectVO的片段代码是:(省去get和set方法)
@Id
private Long id;
private Integer chinafairID;
private Integer area;
private Integer city;
private String industryKind;
@ManyToOne
@JoinColumns( {
@JoinColumn(name = "area", referencedColumnName = "areaid", insertable = false, updatable = false)})
@NotFound(action = NotFoundAction.IGNORE)
private ChinafairBmCityVO bmAarea;
@ManyToOne
@JoinColumns( {
@JoinColumn(name = "city", referencedColumnName = "areaid", insertable = false, updatable = false)})
@NotFound(action = NotFoundAction.IGNORE)
private ChinafairBmCityVO bmCity;
@ManyToOne
@JoinColumns( {
@JoinColumn(name = "industryKind", referencedColumnName = "tradekey", insertable = false, updatable = false)})
@NotFound(action = NotFoundAction.IGNORE)
private ChinafairBmIndustryVO BmIndustry;
/** default constructor */
public ChinafairProjectVO() {
}
logger中有记录下信息:2011-05-12 18:19:54: ERROR util.JDBCExceptionReporter - ORA-01722: 无效数字
查看数据库,发现vo对应的表没有配主键。加上后,还是报错。
经检查,原来是生成对象,加载关联对象出了问题。【没有延迟加载,把关联对象也立刻生成出来了】
ChinafairProjectVO中定义的area是Integer类型,而与之关联的ChinafairBmCityVO中的相应字段是String类型。把类型匹配之后,问题就解决了。