当前位置: 首页 > 面试题库 >

Hibernate:CascadeType.PERSIST不起作用,但是用CascadeType.ALL保存对象

华安民
2023-03-14
问题内容

@Entity
@Table(name = “Section_INST”)
public class Section {

@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "Section_ID_GENERATOR")
@SequenceGenerator(name = "Section_ID_GENERATOR",sequenceName = "Section_ID_SEQUENCER" , initialValue = 1 , allocationSize = 1)
@Column(name = "Section_ID")
private int Id;

@Column(name = "Section_Name")
private String name;

@OneToOne(optional = false,cascade = CascadeType.PERSIST)
@JoinColumn(name = "Exch_ID")
private Exchange exchange;

//---Constructor and Getter Setters-----
}


@Entity
@Table(name = "EXCHANGE_INST")
public class Exchange {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "Exchange_ID_GENERATOR")
@SequenceGenerator(name = "Exchange_ID_GENERATOR",sequenceName = "Exchange_ID_SEQUENCER" , initialValue = 1 , allocationSize = 1)
@Column(name = "Exchange_ID")
private int Id;

@Column(name = "Exchange_name")
private String name;

@OneToOne(mappedBy ="exchange")
private Section section;

//-----------Getter and Setter...And Constructor

}

以下程序不起作用->

    final SessionFactory sessionFactory = configuration.buildSessionFactory();
    final Session session = sessionFactory.openSession();
    session.beginTransaction();

    final Exchange exchange = new Exchange("MyExchange");
    final Section section = new Section("MySection" , exchange);
    exchange.setSection(section);
    session.save(section);

    session.getTransaction().commit();
    session.close();

如果我将Section.java中的层叠选项更改为CascadeType.ALL,那么它将起作用。

@OneToOne(html" target="_blank">optional = false,cascade = CascadeType.PERSIST)   --- > CascadeType.ALL 
@JoinColumn(name = "Exch_ID")
private Exchange exchange;

我认为PERSIST应该保存我的对象d =,但是会引发异常:

org.hibernate.TransientPropertyValueException:非null属性引用一个瞬态值-
必须在当前操作之前保存瞬态实例:Section.exchange-> Exchange


问题答案:

对于save()要级联的操作,您需要CascadeType.SAVE_UPDATE使用专有的Hibernate
Cascade注释启用,因为save()不是标准的JPA操作。或者您需要使用persist()方法,而不是save()方法。



 类似资料:
  • 问题内容: 我正在使用html2canvas 0.4.0渲染屏幕截图,并希望将其另存为Web服务器上的图像。 为此,我编写了以下函数: JavaScript saveJPG.php 渲染完画布后,我可以将其完美地附加到HTML主体中,但是将其保存在服务器上会导致文件损坏(?)。 我可以在IrvanView中读取尺寸,但是图像是透明的/空的?该文件约为2.076 KB。所以它不是真的是空的。 我也尝

  • `javac StudentApplication.java studentapplication.java:6:错误:包org.springframework.boot不存在导入org.springframework.boot.springapplication;^StudentApplication.java:7:错误:包org.springframework.boot.autocigure不

  • 无法使用语法来代替 它看起来像这样: 但是当我使用@Connect装饰器使事物更干净时,我没有得到任何在我的状态中列出的东西。 突然之间,它不知何故实际上并不连接事物: 我做错了什么,我看到每个人都在使用的神奇的@Connect装饰器的正确使用方法是什么? 其余的代码,以防万一,以@connect的形式;

  • 我有一个运行Ubuntu 16.04.1x64的DO droplet,我正在尝试将IPFS作为systemd服务运行。我已经按照这里的说明创建了一个用户“connor”,并安装了IPFS。我将服务存储为~/中的“ipfs.service”。config/systemd/user/ipfs。如下所示的服务: 奇怪的是,如果我运行systemctl--user start ipfs,它会很好地启动。但

  • 问题内容: 我在Elasticsearch 1.2.0(最近从1.0.1升级)上看到了带有ID的怪异行为。 搜索检索我的文档,显示_id的正确值: [终奌站] 结果是 但是,直接在id上查找不是: [terminal] 结果是 看来这是在以前使用自定义脚本进行更新的文档上。 有任何想法吗? 问题答案: 我认为您应该升级到1.2.1。由于发行说明(http://www.elasticsearch.o

  • 我只是在Windows中安装jdk和jre版本8。环境变量已设置。我尝试在cmd中运行“java-version”,它显示了安装的java版本。但是当我尝试用“javac projectname”编译java项目时,系统说javac不能被识别为内部命令或外部命令。有谁能告诉我怎么修好它吗? 下面是我的环境变量: C:\users\foody>echo%路径%C:\ProgramData\Oracl