有如下两个实体类 , Student和Grade 为多对一关系。

Student.java

 @Entity
public class Student {
private Integer id;
private String name;
private Grade grade;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne(cascade={CascadeType.PERSIST})
@JoinColumn(name="gradeid")
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
} }

Grade.java

 @Entity
public class Grade { private Integer id;
private String name; @Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }

可以看到Student类的grade属性已经设置了   @ManyToOne(cascade={CascadeType.PERSIST})

但只save Student对象时依然会报 org.hibernate.TransientObjectException 异常,如下:

public class Init {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction(); Grade g = new Grade();
g.setName("一班"); Student s = new Student();
s.setName("张三");
s.setGrade(g); session.save(s); session.getTransaction().commit(); }
}

运行结果:

Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: accp.hib.Grade

解决办法如下:

方法一:改用persist方法来保存

把session.save(s); 更改为 session.persist(s);

再次保存成功。

Hibernate: select hibernate_sequence.nextval from dual
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into Grade (name, id) values (?, ?)
Hibernate: insert into Student (gradeid, name, id) values (?, ?, ?)

方法二:使用hibernate的自定义的级联,不要使用jpa的

把Student类grade的注解改为hibernate的注解

@ManyToOne(cascade={CascadeType.PERSIST})
@JoinColumn(name="gradeid")

改为:

@ManyToOne

@JoinColumn(name="gradeid")

@Cascade(value={CascadeType.SAVE_UPDATE})

注意,这里的CascadeType和@Cascade都是org.hibernate.annotations包下的,所以把

import javax.persistence.CascadeType;

改为:import org.hibernate.annotations.CascadeType;

并加上:import org.hibernate.annotations.Cascade;

再次保存成功。

hibernate-annotation CascadeType.PERSIST不起作用的解决方法的更多相关文章

  1. 在Android开发中替换资源图片不起作用的解决方法

    现象 在android开发中,经常会需要替换res\drawable中的图片,打开res\layout下的文件预览布局页面发现图片已经被替换,但在模拟器或者真实机器上运行时发现该图片并没有被替换,还是 ...

  2. ie6 z-index不起作用的解决方法

    一.概念 z-index伴随着层的概念产生的.网页中,层的概念与photoshop或是flash中层的概念是一致的.熟悉photoshop或是flash的应该知道,层级越高(图层越靠上),越在上面显示 ...

  3. php中(包括织梦cms)set_time_limit(0)不起作用的解决方法

    背景介绍: 在做织梦冗余图片清理的功能时, 由于冗余图片太多,导致每次清理时都会超时, 后来在网上搜索了各种文章,网上有如下的解决方法: set_time_limit(0) ini_set('max_ ...

  4. eclipse代码提示设置过常用字符还是不起作用的解决方法

    问题:重装eclipse之后发现没有了代码提示,一般情况下在设置中添加自动提示的字符之后就可以了,设置如下 如上图,初始的时候是只有一个点号,并没有字符,输入26个字母的大小写后点击Apply and ...

  5. ios10 safari浏览器 在touchmove 里面写e.preventDefault(); 不起作用 的解决方法

    最近做手机端项目遇到一个问题,就是在ios10系统里面  safari浏览器 在touchmove 里面写e.preventDefault();不起作用 更种google 还是没有找到解决方法 最后找 ...

  6. 关于使用Github,gitignore不起作用的解决方法

      直接上解决方法: 1 2 3 git rm -r --cached . git add . git commit -m 'update .gitignore' 解释: .gitignore文件,具 ...

  7. ios微信浏览器click事件不起作用的解决方法

    $(document).on( "click", ".weui_cell", function (event) {alert(); }); JS代码是这样的,h ...

  8. SpringMVC + Spring + MyBatis 学习笔记:SpringMVC和Spring一同工作的时候,AOP事务管理不起作用的解决方法

    系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 SpringMVC 的 ...

  9. word-spacing汉字不起作用的解决方法

    异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 调节文字间的距离,发现==>word-spacing汉字不起作用 研究发现, ...

随机推荐

  1. Angular之作用域与事件(转)

    学习Angular,首先要理解其作用域机制. Angular应用是分层的,主要有三个层面:视图,模型,视图模型.其中,视图很好理解,就是直接可见的界面,模型就是数据,那么视图模型是什么呢?是一种把数据 ...

  2. Struts2中使用Session的两种方法

    在Struts2里,如果需要在Action中使用到session,可以使用下面两种方式: 通过ActionContext 类中的方法getSession得到 Action实现org.apache.st ...

  3. isNUll ,对于sql中的一个表的description的NULL和空格的处理

    select client.clientname ,description,'client2'= case when client.Description IS NULL then  client.c ...

  4. 从数据库中导出.csv文件

    需求: 本次将数据库中的数据导出成.csv文件(office可以打开), //数据的生成,根据你所选中的数据进行生成 //params:$activity_id -> 活动的id //param ...

  5. 【转】Delphi内嵌ASM简易教程

    Delphi内嵌ASM简易教程 作者:heiying2006-03-19 18:33分类:默认分类标签: 前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入 ...

  6. SQL Server 日志文件增长原因定位

    方法 1.sys.databases; -------------------------------------------------------------------------------- ...

  7. sql server数据库实现保留指定位数小数的函数

    有时候需要对一个特定的含有小数点的数字保留指定位数,比如"123.123600". 在数据库中以函数的形式实现如下: USE [数据库名称] GO /****** Object: ...

  8. HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern)

    策略模式(Strategy Pattern): 定义了了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端. 第一个设计原则:找出应用中可能需要变化之处,把他们独立 ...

  9. js跑马灯效果

    function nextPage() {           /*         克隆第一张图片并添加到box后         box前移一张图片的距离动画         动画回调里把box的 ...

  10. 通过HOOK控制进程的创建

    一. 简介 最近,我了解到一个叫做Sanctuary的相当有趣的安全产品.它能够阻止任何程序的运行-这些程序没有显示在软件列表中-该表中的程序被允许在一个特定的机器上运行.结果,PC用户得到保护而免于 ...