Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用单表列映射双向OneTONE_Java_Hibernate_Persistence_One To One - Fatal编程技术网

Java 使用单表列映射双向OneTONE

Java 使用单表列映射双向OneTONE,java,hibernate,persistence,one-to-one,Java,Hibernate,Persistence,One To One,我有两个实体: @Entity public class Device extends AbstractEntity { @OneToOne(mappedBy = "item") @PrimaryKeyJoinColumn private ItemOverview itemOverview; } 以及实体项目概述: @Entity public class ItemOverview extends AbstractEntity { @OneToOne(cas

我有两个实体:

@Entity
public class Device extends AbstractEntity {

    @OneToOne(mappedBy = "item")
    @PrimaryKeyJoinColumn
    private ItemOverview itemOverview;
}
以及实体项目概述:

@Entity
public class ItemOverview extends AbstractEntity {

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "item_id")
    private Item item;
}
它们都是从
AbstractEntity
扩展而来,该实体具有以下特性:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
protected Long id;
在数据库中,两个表之间存在的唯一引用是
ItemOverview
,其中有一列
item\u id
。查看数据库时,表
Item
不知道
ItemOverview


因此,当我尝试保存包含Item(已经存在!)的新ItemOverview对象时,ItemOverview对象成功保存。但当我再次尝试这样做时,有效地更新了ItemOverview对象(而不更改Item),它会尝试插入Item对象,而不是更新它(或者一起跳过它)。为什么会发生这种情况?

您能显示与hibernate会话和更新实体相关的代码吗?这里没有什么特别的事情发生。我只是使用JpaRepository获取并保存实体。Hibernate实体看起来很好,当更新实体时,您首先从数据库获取它,使用新值更新它,然后在Hibernate会话中更新它,不是吗?或者这应该是你的流程。@Darshit你实际上是对的。。我在更新代码的某个地方搞砸了,试图保存一个复制的(不是由Hibernate获取的)实例。难怪它会更新。谢谢你给我指明了正确的方向!如果你将此作为答案发布,我可以接受。这就是为什么它插入新记录而不是更新当前记录,因为该对象未连接hibernate会话。很高兴我能帮助你们:)你们能展示和hibernate会话和更新实体相关的代码吗?这里并没有什么特别的事情发生。我只是使用JpaRepository获取并保存实体。Hibernate实体看起来很好,当更新实体时,您首先从数据库获取它,使用新值更新它,然后在Hibernate会话中更新它,不是吗?或者这应该是你的流程。@Darshit你实际上是对的。。我在更新代码的某个地方搞砸了,试图保存一个复制的(不是由Hibernate获取的)实例。难怪它会更新。谢谢你给我指明了正确的方向!如果你将此作为答案发布,我可以接受。这就是为什么它插入新记录而不是更新当前记录,因为该对象未连接hibernate会话。很高兴我能帮助你:)