`
hngmduyi
  • 浏览: 335169 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate保存数据时引用为空的外键异常

阅读更多
Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: com.ntcsoft.domain.UserTb.staticUserrights

//用户表
CREATE TABLE USER_TB(
USER_ID NUMBER(8) PRIMARY KEY NOT NULL,//主键 非空 自动增长
USER_NAME VARCHAR2(15) NOT NULL, //用户登录ID
USER_PASSWD VARCHAR2(15) NOT NULL,//用户登录密码
USER_ASK_QUESTI VARCHAR2(100),//用户密码查询问题
USER_ASK_ANSWER VARCHAR2(50),//用户密码查询答案
F_USER_RIGHTS_ID NUMBER(8) DEFAULT 3 NOT NULL,//引用用户权限表中USERRIGHTSID的外键
}

public class UserTb implements java.io.Serializable {
	private Integer userId;
	private StaticUserrights staticUserrights;
	private PageSet pageSet;
	private String userName;
	private String userPasswd;
}

//权限表
CREATE TABLE STATIC_USERRIGHTS(
USER_RIGHTS_ID NUMBER(8) PRIMARY KEY NOT NULL,//主键 非空 自动增长 --用户权限ID 1:系统管理员 2:普通用户 3:游客
USER_RIGHTS_DES VARCHAR2(50)//用户权限描述
);

public class StaticUserrights implements java.io.Serializable {
	private Integer userRightsId;
	private String userRightsDes;
	private Set userTbs = new HashSet(0);
}

//编辑用户信息
public void save(UserTb instance) {
	         getSession().saveOrUpdate(instance);	
	}
public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserTbDao dao = (UserTbDao) context.getBean("userTbDao");
		StaticUserrightsDao staticUserrightsDao = (StaticUserrightsDao) context.getBean("staticUserrightsDao");
UserTb instance=new UserTb();
		instance.setUserName("ee");
		instance.setUserPasswd("ee");
	         dao.save(instance);
//新增用户的时候,如果直接用Hibernate往数据库插数据的时候,(权限默认是3,所以我就没有再指定),就报以上错误!
}

//解决办法
public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserTbDao dao = (UserTbDao) context.getBean("userTbDao");
		StaticUserrightsDao staticUserrightsDao = (StaticUserrightsDao) context.getBean("staticUserrightsDao");
UserTb instance=new UserTb();
		instance.setUserName("ee");
		instance.setUserPasswd("ee");
		instance.setUserNickname("ee");
	    StaticUserrights staticUserrights = staticUserrightsDao.findById(3);//查询权限是3的“权限”然后再set给用户即可
		instance.setStaticUserrights(staticUserrights);
		dao.save(instance);
		System.out.println("======");
分享到:
评论
1 楼 percy30856 2010-09-24  
李明? 0.0

相关推荐

    传智播客hibernate教程_保存多对一关联关系的更进一步分析

    在Java的持久化框架Hibernate中,实体关联是其核心特性之一,它允许我们在数据库中建立对象之间的关系,以便更好地模拟真实世界的数据模型。本教程“传智播客hibernate教程_保存多对一关联关系的更进一步分析”深入...

    Hibernate双向一对一关联映射(注解版)

    3. **初始化关联对象**:在使用双向一对一关联时,确保在需要时正确初始化并设置双方的引用,否则可能引发空指针异常。 4. **事务管理**:由于涉及数据库操作,所以在保存或更新关联对象时,需要确保在事务中进行,...

    Hibernate练习题

    - 如果希望Hibernate级联保存集合中的对象,cascade属性应设为'save-update',以便在保存主对象时自动保存集合中的对象。 11. Hibernate检索方式: - 有四种主要检索方式:HQL(Hibernate查询语言)、Criteria ...

    Hibernate开发指南

    - **Hibernate in Spring**: 集成Spring框架时的最佳实践。 - **编后赘言**: 作者的一些个人感悟和建议。 #### 三、详细知识点解析 ##### 1. 准备工作 - **环境搭建**: 需要安装并配置好Ant环境,将其加入系统...

    Hibernate 一对一关联查询.docx

    综上所述,基于外键的一对一关联在Hibernate中是通过在实体类中定义引用以及在映射文件中设置外键映射来实现的。这种关联关系提供了灵活性,但也需要注意维护关联的正确性和性能优化。在实际开发中,应根据业务需求...

    Hibernate学习要点_one2one 一对一主键双线关联

    5. **异常处理**:当处理一对一双线关联时,可能出现的异常情况包括:外键约束冲突、关联实体未找到等。开发者应编写适当的错误处理逻辑,确保应用程序的健壮性。 ### 总结 Hibernate框架下的One-to-One主键双线...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     5.2 处理SQL引用标识符  5.3 创建命名策略  5.4 设置数据库Schema  5.5 设置类的包名  5.6 运行本章的范例程序  5.7 小结  5.8 思考题 第6章 映射对象标识符  6.1 关系数据库按主键区分不同的记录  6.1.1 ...

    Hibernate多对一

    1. **保存**:在保存多的一方(如学生)时,需要确保一的一方(如班级)已经被持久化,否则会导致外键引用为空异常。 2. **查询**:可以通过`get`方法获取关联的对象,或者在HQL(Hibernate Query Language)查询中...

    HibernateOneOneBidirectionalForeignkey:Hibernate OneOne双向外键

    - 插入数据时,需要确保先保存主实体(如`Person`),再保存依赖实体(如`Profile`),因为`Profile`依赖于`Person`的ID来建立外键。 - 更新关联时,只需更新一个实体的关联对象即可,Hibernate会自动同步另一端。...

    Hibernate+中文文档

    3.2. Hibernate数据源属性 3.3. Hibernate配置属性 3.4. Hibernate JDBC和连接(connection)属性 3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) ...

    hibernate 主键一对一映射(单向) 实例(java类)

    - 当一方实体为空时,需要处理好空值情况,防止出现null pointer异常。 通过以上步骤,我们就可以在Hibernate中实现单向一对一主键映射。这个实例中的`hibernate_fifth_one2one_pk_1`文件可能包含了相关的代码示例...

    hibernate3.2中文文档(chm格式)

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    hibernate的关系映射

    在Java编程领域,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表之间的交互转化为简单的API调用。关系映射是Hibernate的核心特性之一,它允许我们将复杂的数据库结构与...

    hibernate一对多例子

    - `not-found="ignore|exception"`属性表示当找不到关联时的行为,默认为抛出异常,也可以设置为忽略。 - `entity-name="EntityName"`属性可选,用于指定实体名称。 - `<key>`元素用于指定关联的外键。 - `outer-...

    Hibernate笔记

    例如,一个部门对应多个员工,员工对象的 `department` 属性应定义为 `<many-to-one>`,并指定引用的外键列。当设置员工的部门时,需要传递整个 Department 对象,而非单一的部门 ID。 在主外键映射中,如果从表的...

    hibernate3.6 文档(pdf 格式)

    - **操作 XML 数据**:展示如何通过 Hibernate 操作 XML 数据。 #### 二十一、提高性能 - **获取策略**:讨论如何优化关联对象的加载策略。 - **二级缓存**:介绍 Hibernate 的二级缓存机制及其配置方法。 - **缓存...

    hibernate03:多对一单向关联、多对一双向关联

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而简化了数据访问。本文主要探讨的是Hibernate中的两种关联关系:多对一单向关联和多对一双向...

    Hibernate中文详细学习文档

    4.1.4. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators)(可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. ...

Global site tag (gtag.js) - Google Analytics