代码之家  ›  专栏  ›  技术社区  ›  gschambial

尝试级联持久子实体时出现持久异常

  •  1
  • gschambial  · 技术社区  · 7 年前

    我有2个实体:

    硕士学位:

    @Entity
    @Table(name = "master")
    public class Master implements java.io.Serializable {
    
        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "seq")
        private Integer seq;
    
        @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        @JoinColumn(name = "seq", referencedColumnName = "seq")
        private SubMaster subMaster;
    
    
        ...................
    
    }
    

    子主机:

    @Entity
    @Table(name = "sub_master")
    public class SubMaster implements java.io.Serializable {
    
        @Id
        @Column(name = "seq")
        private Integer seq;
    
        private String subName;
    
    
        ...................
    
    }
    

    当我努力坚持的时候 Master 通过设置 SubMaster

    javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned beforeQuery calling save(): SubMaster
    

    然而,我希望Hibernate会在父实体被持久化时自动持久化子实体。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Zeromus    7 年前

    现在是解决方案

    取决于JPA版本:

    @Id 关系注释上的注释

    @Entity
    @Table(name = "master")
    public class Master implements java.io.Serializable {
    
        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "seq")
        private Integer seq;
    
        @OneToOne(mappedBy = "master", cascade = CascadeType.ALL)
        private SubMaster subMaster;
    
    }
    
    @Entity
    @Table(name = "sub_master")
    public class SubMaster implements java.io.Serializable {
    
        @Id
        @JoinColumn(name = "seq", referencedColumnName = "seq")
        @OneToOne
        private Master master;
    
        private String subName;
    
    }
    

    您告诉您的子实体获取父实体的id

    master.setSubMaster(subMaster);
    subMaster.setMaster(master)
    

    在基本注释中,需要将id和关系列分开,问题是 @GeneratedValue

    https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Primary_Keys_through_OneToOne_and_ManyToOne_Relationships

        2
  •  2
  •   alexay68    7 年前