gpt4 book ai didi

java - hql 查询将数据保留在具有多对一关系的表中

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:40 26 4
gpt4 key购买 nike

@Entity(name="card")
public class Card {

@Id
@GenericGenerator(name="generator",strategy="increment")
@GeneratedValue(generator="generator")
private int id;

@Transient
private int slotID;

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

private String cardType;

/* getter and setters */
}

@Entity(name="PhysicalPort")
public class PhysicalPort {

@Id
@GenericGenerator(name="generator",strategy="increment")
@GeneratedValue(generator="generator")
private int id;

@Column(name="cardPort")
private int cardPort;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="cardId")
private Card cardInfo;

/* getter and setters */
}

在存储库类中,我使用下面的查询来保存数据

sessionFactory.getCurrentSession().persist(physicalPort);

在保留数据时,我只需要在 PhysicalPort 表中添加数据,并使用卡表 id 作为引用键,但数据也会使用新的 id 添加到卡表中。

最佳答案

您保存了两张卡,因为您的对象作为新对象传递:

这是你的 Json:
{“cardPort”:“1”,“interfaceName”:“E1”,“state”:“启用”,“fec”:true,“systemLoopback”:false,“rxBytes”:513,“rxPackets”:0,“rxErrorPackets”:571017851,“rxPacketsDrops”:1852797802,“txBytes”:18691 16517,“txPackets”:154804836,“txErroPackets”:0,“txPacketsDrops”:0,“时间”:“23:56:35”,“内存总计”:4278190080,“内存空闲”:4294967295,“cpuuser”:996646,“cpusys”:1040 71、 "cardInfo": { "cardType":"TDM", "macId":"12"} }

您的cardInfo属性设置如下:

"cardInfo": { "cardType":"TDM", "macId":"12"}

因此,您告诉实体管理器,添加一个不带 id (id = null) 的 cardInfo,因为未指定。

因此,当您尝试保存 PhysicalPort 对象时,行为是:

检查外键字段(您的 cardInfo 属性),该对象没有 id 值,因此这是一个新对象 -> INSERT INTO

检查PhysicalPort对象并在PhysicalPort中添加一个新行。

如果您想修复代码,当您传递 cardInfo 对象时,请显式传递该表中显示的行 ID 值,如下所示:

"cardInfo": { "id":"行 ID 的值", "cardType":"TDM", "macId":"12"}

关于java - hql 查询将数据保留在具有多对一关系的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32496823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com