Hibernate尝试在不进行任何级联的情况下插入一对一关系

杰纳雷

问题

我有两个实体。一种称为EntityPojo,另一种称为ChunkPojo。EntityPojo不了解ChunkPojo。ChunkPojo对EntityPojo有1:1的引用。首先,我保存EntityPojo,然后保存ChunkPojo。

在保存ChunkPojo时,休眠状态尝试插入引用的1:1 EntityPojo,这将导致重复的键异常。但是...级联被禁用,这不应该发生。

异常图片

代码


/** The base for all database objects
*/
@MappedSuperclass
public abstract class DatabaseObject extends Component{

    @Id
    public Long id;

    @MapsId
    @JoinColumn(name = "id")
    @OneToOne(cascade = {})
    public EntityPojo entityPojo;
}

@Entity
@Table(name = "entity")
@Access(AccessType.FIELD)
public class EntityPojo {

    @Id public long id;
    public long version;

    public String tag;
    public String typeID;

    public EntityPojo() { }
}

/**
 * A chunk which extends DatabaseObject.
 */
@Entity
@Table(name = "chunk", uniqueConstraints = {@UniqueConstraint(columnNames={"x", "y"})}, indexes = {@Index(columnList = "x,y")})
@Access(value = AccessType.FIELD)
@SelectBeforeUpdate(value = false)
public class ChunkPojo extends DatabaseObject {

    public int x;
    public int y;
    public Date createdOn;
}

public static void main(String[] args){

        var enitity = new EntityPojo();
        enitity.id = 1;
        enitity.tag = "player";
        enitity.typeID = "1:1";

        var chunk = new ChunkPojo();
        chunk.x = 10;
        chunk.y = 11;
        chunk.entityPojo = enitity;
        chunk.id = enitity.id;

        syncDatabase.save(enitity);  // Just calls session.persist - works fine 
        syncDatabase.save(chunk);    // Also calls session.persist - exception
}

问题

当我在这里显然没有使用任何级联时,为什么休眠会尝试插入引用的1:1关系?我如何防止它发生呢?

很高兴为您提供有关此主题的任何帮助!它让我疯狂 !谢谢 !

戴维·德玛

认为发生的事情是该@MapsId注释告诉Hibernate取得IDchunk并将其映射到的ID字段entity因此chunk,即使没有明确要求保存,保存时也会自动保留级联。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Hibernate尝试在不进行任何级联的情况下插入一对一关系

来自分类Dev

插入一对一关系

来自分类Dev

一对一关系插入

来自分类Dev

如何在没有任何缺点的情况下正确地在 MongoDB 中建立一对一关系?

来自分类Dev

在零或一对一关系的情况下如何限制linq查询中的SQL投影

来自分类Dev

在Swift中以一对一关系插入NSManagedObject

来自分类Dev

以一对一关系插入数据-域

来自分类Dev

实体框架中的一对一关系插入

来自分类Dev

特殊情况Sqlalchamy的一对一关系

来自分类Dev

Hibernate / JPA一对一关系

来自分类Dev

使用INTERLEAVE表进行一对一关系

来自分类Dev

当某些列仅在某些情况下适用时,为一对一关系设计数据库

来自分类Dev

如何在没有连接列的情况下映射一对一关系(实体通过其 ID 连接)?

来自分类Dev

休眠一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

建立一对一关系

来自分类Dev

GSON一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

一对一关系

来自分类Dev

MYSQL一对一关系

来自分类Dev

实现一对一关系

来自分类Dev

与查询的一对一关系

来自分类Dev

MySQL和级联删除中的一对一关系

来自分类Dev

Fluent API不以一对一关系级联删除

来自分类Dev

访问一对一关系的表单 UI。不想级联删除

来自分类Dev

一对零或一对一关系的实体框架(EF)代码优先级联删除

来自分类Dev

MySQL-尝试删除一对一关系的一侧

来自分类Dev

具有一对一关系的SQLalchemy批量插入