错误显示: net.sf.hibernate.PropertyValueException: not-null property references a null or transient value: com.Order.customer
部分原文件:( customer 和 order 类关系:一对多关联)
Order.hbm.xml
……………
< many-to-one
name = "customer"
column = "CUSTOMER_ID"
class = "com.Customer"
not-null = "true"
cascade = "save-update"
/>
执行文件:
………
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
// Create some data and persist it
tx = session.beginTransaction();
Customer customer=new Customer();
customer.setName("Jack");
Order order=new Order();
order.setOrderNumber("Jack_Order001");
session.save(customer);
session.save(order);
tx.commit();
原因分析:因为在执行代码中,没有将 customer 和 order 类一对多关联起来,若单独持久化两个类: session.save(customer);session.save(order); 则在保存 order 的时候,由于 CUSTOMER_ID是与 customer类外键,因此无法读取 customer_id, 而在 order.hbm.xml 中指定其不为空,则产生了以上错误。
问题解决: not-null = "true" 改为:not-null="false" 虽然程序无问题,但order表 CUSTOMER_ID为空,不符合逻辑。应该将指定其一对多的关联。
order.setCustomer(customer);
customer.getOrders().add(order);
2〉
错误显示: RROR SessionImpl:2400 - Could not synchronize database state with session
net.sf.hibernate.exception.GenericJDBCException: could not delete collection: [com.Customer.orders#2]
部分原文件:
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(3));
session.delete(customer);
tx.commit();
原因分析:因为 cascade默认值为 none,所以当删除customer时,不会自动删除与其关联的order对象。
问题解决:添加语句 cascade = "delete"
3>
错误显示:
17:24:34,992 ERROR JDBCExceptionReporter:58 - [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在关键字 'ORDER' 附近有语法错误。
17:24:34,992 WARN JDBCExceptionReporter:57 - SQL Error: 156, SQLState: HY000
17:24:35,002 ERROR JDBCExceptionReporter:58 - [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在关键字 'ORDER' 附近有语法错误。
17:24:35,022 WARN JDBCExceptionReporter:34 - SQL Warning: 0, SQLState:
net.sf.hibernate.exception.GenericJDBCException : could not initialize collection: [com.Customer.orders#2]
部分原文件: order.hbm.xml
< hibernate-mapping >
< class name = "com.Order" table = "ORDER" >
< id name = "id" type = "long" column = "ID" >
< generator class = "increment" />
</ id >
< property name = "orderNumber" type = "string" >
< column name = "ORDER_NUMBER" length = "15" />
</ property >
< many-to-one
name = "customer"
column = "CUSTOMER_ID"
class = "com.Customer"
outer-join = "true"
/>
原因分析:因为 order 表在 SQL 2000 数据库中已经定义了,如果用户在定义了 order 表,并且程序对该表进行连接等操作就会出错
问题解决:将 引用 order 处改为 [order]
< class name = "com.Order" table = "[ORDER]" >
4>
net.sf.hibernate.exception.SQLGrammarException : Could not save object
at net.sf.hibernate.exception.SQLStateConverter.convert( SQLStateConverter.java:58 )
at net.sf.hibernate.exception.JDBCExceptionHelper.convert( JDBCExceptionHelper.java:29 )
at net.sf.hibernate.impl.SessionImpl.convert( SessionImpl.java:4131 )
at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier( SessionImpl.java:794 )
at net.sf.hibernate.impl.SessionImpl.save( SessionImpl.java:749 )
at com.BusinessService.saveCategoryWithCascade( BusinessService.java:54 )
at com.BusinessService.test( BusinessService.java:104 )
at com.BusinessService.main( BusinessService.java:109 )
Caused by: java.sql.SQLException : [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'CATEGORIES' 无效。
5〉
错误显示: net.sf.hibernate.MappingException : Resource: Add valid path not found
部分原文件: hibernate.hbm.xml
< hibernate-configuration >
< session-factory >
< property name = "connection.username" > sa </ property >
< property name = "connection.url" > jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test </ property >
< property name = "dialect" > net.sf.hibernate.dialect.SQLServerDialect </ property >
< property name = "myeclipse.connection.profile" > MSSQL </ property >
< property name = "connection.password" > hheryh </ property >
< property name = "connection.driver_class" > com.microsoft.jdbc.sqlserver.SQLServerDriver </ property >
< mapping resource = "Add valid path" />
</ session-factory >
原因分析:找不到有效的 xml 文件
问题解决:将所有配置文件都加到 resource 里
将< mapping resource = "Add valid path" />改为
< mapping resource = "com/Customer.hbm.xml" />
< mapping resource = "com/Order.hbm.xml" />
6〉 错误显示
net.sf.hibernate.MappingException : Error reading resource: com/Customer.hbm.xml
at net.sf.hibernate.cfg.Configuration.addResource( Configuration.java:340 )
at net.sf.hibernate.cfg.Configuration.doConfigure( Configuration.java:1027 )
at net.sf.hibernate.cfg.Configuration.doConfigure( Configuration.java:983 )
at net.sf.hibernate.cfg.Configuration.configure( Configuration.java:911 )
at net.sf.hibernate.cfg.Configuration.configure( Configuration.java:897 )
at com.BusinessService.<clinit>( BusinessService.java:17 )
Caused by: net.sf.hibernate.MappingException : duplicate import: Customer
at net.sf.hibernate.cfg.Mappings.addImport( Mappings.java:85 )
at net.sf.hibernate.cfg.Binder.bindClass( Binder.java:126 )
at net.sf.hibernate.cfg.Binder.bindRootClass( Binder.java:221 )
at net.sf.hibernate.cfg.Binder.bindRoot( Binder.java:1256 )
at net.sf.hibernate.cfg.Configuration.add( Configuration.java:253 )
at net.sf.hibernate.cfg.Configuration.addInputStream( Configuration.java:289 )
at net.sf.hibernate.cfg.Configuration.addResource( Configuration.java:337 )
... 5 more
部分原文件 :hibernate.hbm.xml
<? xml version = '1.0' encoding = 'UTF-8' ?>
<! DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd" >
<!-- Generated by MyEclipse Hibernate Tools. -->
< hibernate-configuration >
< session-factory >
< property name = "connection.username" > sa </ property >
< property name = "connection.url" > jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test </ property >
< property name = "dialect" > net.sf.hibernate.dialect.SQLServerDialect </ property >
< property name = "myeclipse.connection.profile" > MSSQL </ property >
< property name = "connection.password" > hheryh </ property >
< property name = "connection.driver_class" > com.microsoft.jdbc.sqlserver.SQLServerDriver </ property >
< mapping resource = "com/Customer.hbm.xml" />
</ session-factory >
</ hibernate-configuration >
主程序:
static{
try{
// Create a configuration based on the properties file we've put
Configuration config = new Configuration();
config.addClass(Customer.class);
// Get the session factory we can use for persistence
sessionFactory = config
.configure()
.buildSessionFactory();
}catch(Exception e){e.printStackTrace();}
}
解决方法: config.addClass(Customer.class);
sessionFactory = config.configure().buildSessionFactory();
原因分析: hibernaet 配置文件有两种格式,一种是 xml 格式,一种是普通的 .property 格式 .
在 1.2 版本中,编译时自动会在 path 路径中查找 property 格式的配置文件。但不会查询 xml 格式的配置文件,因此需要在程序中手动添加 config.configure() ,但此时就不要加载了。
上面的程序 加载了一次 config.configure() ,又映射了一次,所以出错。
解决方法:
若配置文件为 xml 格式的,程序编写如下:
// Create a configuration based on the properties file we've put
Configuration config = new Configuration();
// Get the session factory we can use for persistence
sessionFactory = config
.configure()
.buildSessionFactory();
若配置文件为 property 格式的,程序编写如下:
// Create a configuration based on the properties file we've put
Configuration config = new Configuration();
config.addClass(Customer.class);
// Get the session factory we can use for persistence
sessionFactory = config.buildSessionFactory();
=========================================================
==============20090929 add=================================
7、Duplicate class/entity mapping 报错的问题
Could not parse configuration: /hibernate.cfg
Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping
Caused by: org.dom4j.DocumentException: FWK005 parse may not be called while pa
sing. Nested exception: FWK005 parse may not be called while parsing.
这些错误的解决方法:
总结:
HibernateSessionFactory 中 getSession() 方法加一个 synchronized
或者检查一下是否用了两个数据连接形式,保证使用的是单一实例
分享到:
相关推荐
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作。在大型项目中,由于业务需求复杂,我们常常会使用到类的继承来组织代码结构,而Hibernate提供了对...
在Java企业级开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中...
标题中的“Spring+Hibernate 自动映射”是指在Java Web开发中,利用Spring框架与Hibernate ORM工具进行数据层的整合,实现对象关系映射(ORM)的自动化处理。这一技术结合了Spring的强大依赖注入(DI)和事务管理...
《Hibernate集合映射详解》 Hibernate作为Java领域中的一款强大持久化框架,其核心功能之一就是对象关系映射(ORM),使得开发者可以方便地在Java对象与数据库表之间进行交互。其中,集合映射是Hibernate中非常关键...
在IT行业中,数据库管理和对象关系映射(ORM)框架是至关重要的部分,特别是对于Java开发者而言,Hibernate是一个广泛使用的ORM工具。本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合...
Hibernate,作为Java中广泛使用的对象关系映射(ORM)框架,提供了一种优雅的方式来映射枚举类型到数据库。本文将深入探讨Hibernate如何映射枚举类型,并给出实际应用示例。 ### Hibernate枚举映射方式 #### 1. `@...
Hibernate 注解映射 Hibernate 注解映射是 Hibernate 框架中的一种映射方式,它使用 Java 注解来描述实体类和数据库表之间的映射关系,提高开发效率。 一、 环境搭建和基本映射 在使用 Hibernate 注解映射之前,...
注:为节省空间,程序中需要的jar包,均在HibernateManytoManyMapCascadingSave.zip\HibernateManytoManyMapCascadingSave\lib\ <br>Hibernate 多对多实体映射实例 <br>学习Hibernate 实体映射的映射的好帮手...
Hibernate容器映射技术(Set、List、Map)
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...
本实例主要探讨的是Hibernate的高级映射技术,包括单向一对一、单向多对一、单向一对多以及单向多对多这四种关系映射。 首先,我们来理解一下什么是映射。在Hibernate中,映射是将对象模型与关系数据库之间的桥梁,...
在Java的持久化框架Hibernate中,数组映射是一种常见的数据模型转换方式,它允许我们将数据库中的数据以数组的形式存储在Java对象中。本篇将详细探讨`hibernate array 数组映射`的相关知识点,包括其原理、配置、...
在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本资源“Hibernate实体映射”提供了一个深入理解这一关键概念的机会,通过...
"自动生成 Hibernate 映射文件和实体类" 自动生成 Hibernate 映射文件和实体类是使用 MyEclipse 工具来实现的,这可以大大提高开发效率,减少开发时间。下面将详细介绍如何使用 MyEclipse 自动生成 Hibernate 映射...
首先,我们需要了解一个基本的Hibernate映射文件结构: ```xml <hibernate-mapping> <!-- 映射类的属性 --> </hibernate-mapping> ``` 这里的`<class>`标签表示映射到特定的Java类,其属性`name`指定了对应的...
**hibernate映射与查询** Hibernate 是一个流行的 Java 应用程序开发框架,它提供了一个持久层解决方案,简化了数据库操作。对于初学者来说,理解 Hibernate 的映射和查询机制是至关重要的,因为它们构成了 ...
Hibernate对象关系映射一对多 很基础等文档
**标题:“Hibernate关系映射”** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate...
本实践项目“Hibernate查询映射试验”旨在通过一系列示例帮助开发者掌握Hibernate中的查询映射技术,包括HQL(Hibernate Query Language)和Criteria API。 首先,Hibernate的核心是对象关系映射(ORM),它允许...