`
ytffhvk
  • 浏览: 12405 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于Hibernate Annotations 用户自定义类型的问题

阅读更多

小弟是想问关于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);
 }
 }

分享到:
评论
1 楼 polygoncell 2008-03-09  
我个人认为,你这个POJO在设计上存在问题。

1. phone 是 Integer,不需要使用Type
2. Address建议使用@Embeddable和@Embedded

具体关于这些annotations可参阅"Hibernate 3和Java Persistence API 程序开发从入门到精通"一书

相关推荐

    hibernate-annotations

    《Hibernate Annotations 3.4.0.GA:深入解析企业级Java开发的持久化利器》 Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库与Java应用程序之间的交互。其中,Hibernate ...

    hibernate annotations 3.4.0.GA API

    《Hibernate Annotations 3.4.0.GA API详解》 Hibernate是Java开发中广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作,将数据库操作与业务逻辑解耦。Hibernate Annotations是Hibernate框架的一个重要...

    hibernate-annotations-3.4.0.GA

    Hibernate支持自定义类型转换,通过`@Type`注解可以指定自定义类型,如日期时间格式、枚举等。 8. **回调事件** `@PrePersist`、`@PostPersist`、`@PreUpdate`、`@PostUpdate`、`@PreRemove`和`@PostRemove`等...

    hibernate annotations 中文文档

    8. **转换器和用户类型** - `@Converter`: 自定义类型转换器,用于处理非标准数据类型。 - `@UserType`: 实现自定义的Java类型到SQL类型之间的转换。 9. **其他高级特性** - `@PrePersist`, `@PostPersist`: ...

    hibernate_annotations.rar

    【hibernate_annotations.rar】这个压缩包文件主要涵盖了关于Hibernate框架中注解的使用和理解。Hibernate是一款流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据...

    Hibernate Annotations Reference 中文参考手册HTML版

    **Hibernate Annotations 参考手册中文版** Hibernate 是一个流行的开源对象关系映射(ORM)框架,它允许开发者使用面向对象的编程模型来处理数据库操作。Hibernate Annotations 是 Hibernate 的一个重要组成部分,...

    hibernate-annotations-3.4.0.jar

    《Hibernate核心组件:hibernate-annotations-3.4.0.jar详解》 在Java世界里,ORM(Object-Relational Mapping)框架是连接数据库的重要工具,其中Hibernate作为一款广泛应用的ORM框架,大大简化了数据库操作。而`...

    hibernate-commons-annotations-5.0.1.Final.jar

    5. `org.hibernate.boot.registry`:这部分代码涉及到了Hibernate的注册机制,允许用户自定义或扩展服务。 四、注解处理流程 当应用启动时,JVM会扫描类路径中的`META-INF/services/javax.persistence.spi....

    hibernate_annotations(中文API,高清)

    以下是一些关于Hibernate Annotations的关键知识点: 1. **注解的使用**:Hibernate Annotations允许开发者使用各种注解来定义对象到数据库表的映射关系。例如,@Entity注解用于标记一个类作为实体类,@Table注解...

    hibernate-annotations-3.4.0.GA.chm中文版

    9. **转换器注解**:@Converter和@AttributeConverter用于自定义类型转换,将Java对象转化为数据库可存储的形式。 10. **查询注解**:@NamedQuery和@NamedNativeQuery可以预先定义JPA和原生SQL查询,提高代码可读性...

    hibernate-commons-annotations-3.1.0.GA

    《Hibernate Commons Annotations 3.1.0.GA详解》 Hibernate Commons Annotations(简称HCA)是Hibernate框架的一个重要组成部分,它提供了一套用于在Java类和字段上定义元数据的API,这些元数据用于驱动Hibernate...

    hibernate-annotations-3.3.0.GA

    @Temporal用于时间类型字段的精确控制,@TableGenerator则可以自定义主键生成策略,@GeneratedValue则用于自动生成主键。 3. 支持JPA 1.0规范:3.3.0.GA版本完全支持Java Persistence API 1.0标准,这意味着开发者...

    hibernate annotations

    2. **添加依赖**:通过Maven或Gradle添加Hibernate Core、Hibernate Annotations等依赖。 3. **编写实体类**:使用@Entity注解来标记实体类,并使用@Id注解指定主键字段。 4. **配置Hibernate**:编写`hibernate.cfg...

    hibernate映射枚举类型

    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详解

    ### Hibernate Annotations 详解 #### 一、设置一个注解项目 **1.1 要求** 在开始之前,确保你的开发环境满足以下要求: - Java SE 5 或更高版本。 - 支持 EJB 3 或 JPA 的容器。 - Hibernate 3.4.0.GA 或更高...

    hibernate-annotations_中文帮助文档

    ### Hibernate Annotations 中文帮助文档概览 #### 一、引言 Hibernate 是一款流行的 Java 持久层框架,能够简化 Java 应用程序与数据库交互的过程。在 Hibernate 2.x 版本中,元数据主要通过 XML 文件来管理。随着...

    hibernate_-annotations_中文帮助文档api完整版

    ### Hibernate Annotations 参考文档知识点概述 #### 一、前言 - **目的与范围**:本参考文档旨在为开发者提供全面深入的理解和使用Hibernate Annotations的指南,涵盖从项目搭建到高级特性的介绍。 - **翻译说明**...

Global site tag (gtag.js) - Google Analytics