小弟是想问关于Hibernate Annotations 用户自定义类型的问题,我在做插入操作的时候,数据就可以正确的插入到数据库中;但是执行查询操作的时候,就出现错误了,SQL语句可以出来的,也是可以在PL/SQL中正确执行,异常如下:
Hibernate: select customers_0_.id as id7_0_, customers_0_.COM_STREET as COM2_7_0_, customers_0_.COM_CITY as COM3_7_0_, customers_0_.COM_PROVINCE as COM4_7_0_, customers_0_.COM_ZIPCODE as COM5_7_0_, customers_0_.HOME_STREET as HOME6_7_0_, customers_0_.HOME_CITY as HOME7_7_0_, customers_0_.HOME_PROVINCE as HOME8_7_0_, customers_0_.HOME_ZIPCODE as HOME9_7_0_, customers_0_.sex as sex7_0_, customers_0_.phone as phone7_0_, customers_0_.FIRSTNAME as FIRSTNAME7_0_, customers_0_.LASTNAME as LASTNAME7_0_ from CUSTOMERS_USERTYPE customers_0_ where customers_0_.id=?
---------------------------SQL可以打出来了,可以在PL/SQL里面执行
10:41:23,125 WARN JDBCExceptionReporter:71 - SQL Error: 17024, SQLState: null
10:41:23,125 ERROR JDBCExceptionReporter:72 - 未读取数据
10:41:23,140 INFO DefaultLoadEventListener:109 - Error performing load command
org.hibernate.exception.GenericJDBCException: could not load an entity: [com.usertype.forms.Customers_UserType#7]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1798)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2977)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:393)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:374)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:137)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:193)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:101)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
at org.springframework.orm.hibernate3.HibernateTemplate$1.doInHibernate(HibernateTemplate.java:460)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:362)
at org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:454)
at org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:448)
at com.usertype.dao.Customers_UserTypeImpDao.getCustomers_UserType(Customers_UserTypeImpDao.java:18)
at com.hibernate.Customers_UserTypeServices.showCustomers_UserType(Customers_UserTypeServices.java:59)
at com.hibernate.Main.main(Main.java:48)
Caused by: java.sql.SQLException: 未读取数据
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleStatement.wasNullValue(OracleStatement.java:3174)
at oracle.jdbc.driver.OracleResultSetImpl.wasNull(OracleResultSetImpl.java:127)
at com.usertype.AddressUserType.nullSafeGet(AddressUserType.java:53)
at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:105)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2031)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1371)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1299)
at org.hibernate.loader.Loader.getRow(Loader.java:1197)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:568)
at org.hibernate.loader.Loader.doQuery(Loader.java:689)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1784)
... 18 more
我的部分代码如下:
1.POJO
package com.usertype.forms;
import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.annotations.*;
/**
*@project clustering
*@author xuchao
*@create_date 2008-3-6
*@description
*/
@SuppressWarnings("serial")
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate=true)
@Table(name="CUSTOMERS_USERTYPE")
@SequenceGenerator(name="CUSTOMERS_USERTYPE_SEQ",sequenceName="CUSTOMERS_USERTYPE_SEQ")
public class Customers_UserType implements Serializable {
private Integer id;
private Name name;
private Address homeAddress;
private Address comAddress;
private Gender gender;
private Integer phone;
/** full constructor */
public Customers_UserType(Name name, Address homeAddress, Address comAddress,Gender gender,Integer phone) {
this.name = name;
this.homeAddress = homeAddress;
this.comAddress = comAddress;
this.gender=gender;
this.phone=phone;
}
public Customers_UserType() {
}
@Type(type="com.usertype.AddressUserType")
@Columns(columns = {
@Column(name="COM_STREET",length=30),
@Column(name="COM_CITY",length=30),
@Column(name="COM_PROVINCE",length=30),
@Column(name="COM_ZIPCODE",length=30)
})
public Address getComAddress() {
return comAddress;
}
public void setComAddress(Address comAddress) {
this.comAddress = comAddress;
}
@Type(type = "com.usertype.GenderUserType")
@Column(name="sex",length=1)
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Type(type="com.usertype.AddressUserType")
@Columns(columns = {
@Column(name="HOME_STREET",length=30),
@Column(name="HOME_CITY",length=30),
@Column(name="HOME_PROVINCE",length=30),
@Column(name="HOME_ZIPCODE",length=30)
})
public Address getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(Address homeAddress) {
this.homeAddress = homeAddress;
}
@Id
@GeneratedValue(generator="CUSTOMERS_USERTYPE_SEQ")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Type(type="com.usertype.NameCompositeUserType")
@Columns(columns = {
@Column(name="FIRSTNAME",length=30),
@Column(name="LASTNAME",length=30)
})
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
@Type(type = "com.usertype.PhoneUserType")
@Column(name="phone",length=20)
public Integer getPhone() {
return phone;
}
public void setPhone(Integer phone) {
this.phone = phone;
}
}
2. DAO
package com.usertype.dao;
import java.io.Serializable;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.usertype.forms.Customers_UserType;
/**
*@project clustering
*@author xuchao
*@create_date 2008-3-6
*@description
*/
public class Customers_UserTypeImpDao extends HibernateDaoSupport implements
Customers_UserTypeDao {
/*错误就在这里,执行Get方法的时候,报错*/
public Customers_UserType getCustomers_UserType(Serializable id) {
return (Customers_UserType) getHibernateTemplate().get(Customers_UserType.class, id);
}
/*在做插入操作的时候,就可以正常执行.*/
public void insertCustomers_UserType(Customers_UserType customers_UserType) {
getHibernateTemplate().save(customers_UserType);
}
}
分享到:
相关推荐
《Hibernate Annotations 3.4.0.GA:深入解析企业级Java开发的持久化利器》 Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库与Java应用程序之间的交互。其中,Hibernate ...
《Hibernate Annotations 3.4.0.GA API详解》 Hibernate是Java开发中广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作,将数据库操作与业务逻辑解耦。Hibernate Annotations是Hibernate框架的一个重要...
Hibernate支持自定义类型转换,通过`@Type`注解可以指定自定义类型,如日期时间格式、枚举等。 8. **回调事件** `@PrePersist`、`@PostPersist`、`@PreUpdate`、`@PostUpdate`、`@PreRemove`和`@PostRemove`等...
8. **转换器和用户类型** - `@Converter`: 自定义类型转换器,用于处理非标准数据类型。 - `@UserType`: 实现自定义的Java类型到SQL类型之间的转换。 9. **其他高级特性** - `@PrePersist`, `@PostPersist`: ...
【hibernate_annotations.rar】这个压缩包文件主要涵盖了关于Hibernate框架中注解的使用和理解。Hibernate是一款流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据...
**Hibernate Annotations 参考手册中文版** Hibernate 是一个流行的开源对象关系映射(ORM)框架,它允许开发者使用面向对象的编程模型来处理数据库操作。Hibernate Annotations 是 Hibernate 的一个重要组成部分,...
《Hibernate核心组件:hibernate-annotations-3.4.0.jar详解》 在Java世界里,ORM(Object-Relational Mapping)框架是连接数据库的重要工具,其中Hibernate作为一款广泛应用的ORM框架,大大简化了数据库操作。而`...
5. `org.hibernate.boot.registry`:这部分代码涉及到了Hibernate的注册机制,允许用户自定义或扩展服务。 四、注解处理流程 当应用启动时,JVM会扫描类路径中的`META-INF/services/javax.persistence.spi....
以下是一些关于Hibernate Annotations的关键知识点: 1. **注解的使用**:Hibernate Annotations允许开发者使用各种注解来定义对象到数据库表的映射关系。例如,@Entity注解用于标记一个类作为实体类,@Table注解...
9. **转换器注解**:@Converter和@AttributeConverter用于自定义类型转换,将Java对象转化为数据库可存储的形式。 10. **查询注解**:@NamedQuery和@NamedNativeQuery可以预先定义JPA和原生SQL查询,提高代码可读性...
《Hibernate Commons Annotations 3.1.0.GA详解》 Hibernate Commons Annotations(简称HCA)是Hibernate框架的一个重要组成部分,它提供了一套用于在Java类和字段上定义元数据的API,这些元数据用于驱动Hibernate...
@Temporal用于时间类型字段的精确控制,@TableGenerator则可以自定义主键生成策略,@GeneratedValue则用于自动生成主键。 3. 支持JPA 1.0规范:3.3.0.GA版本完全支持Java Persistence API 1.0标准,这意味着开发者...
2. **添加依赖**:通过Maven或Gradle添加Hibernate Core、Hibernate Annotations等依赖。 3. **编写实体类**:使用@Entity注解来标记实体类,并使用@Id注解指定主键字段。 4. **配置Hibernate**:编写`hibernate.cfg...
import org.hibernate.annotations.Type; import org.hibernate.type.EnumType; public enum Status { ACTIVE("A"), INACTIVE("I"); private String code; // 构造器,getters和setters } @Entity public class...
### Hibernate Annotations 详解 #### 一、设置一个注解项目 **1.1 要求** 在开始之前,确保你的开发环境满足以下要求: - Java SE 5 或更高版本。 - 支持 EJB 3 或 JPA 的容器。 - Hibernate 3.4.0.GA 或更高...
### Hibernate Annotations 中文帮助文档概览 #### 一、引言 Hibernate 是一款流行的 Java 持久层框架,能够简化 Java 应用程序与数据库交互的过程。在 Hibernate 2.x 版本中,元数据主要通过 XML 文件来管理。随着...
### Hibernate Annotations 参考文档知识点概述 #### 一、前言 - **目的与范围**:本参考文档旨在为开发者提供全面深入的理解和使用Hibernate Annotations的指南,涵盖从项目搭建到高级特性的介绍。 - **翻译说明**...