代码之家  ›  专栏  ›  技术社区  ›  at.

如何在Hibernate3.6中级联保存简单的共享主键一对一映射

  •  1
  • at.  · 技术社区  · 14 年前

    我需要一个简单的hibernate示例,其中一个实体与另一个实体之间有一对一的关系,它们都共享主键。我只需要保存自动生成主键的主实体,而另一个依赖实体则自动级联保存。例如:

    public class Person {
        @Id
        @GeneratedValue
        @Column(name = "Id")
        private Long id;
    
        @OneToOne(mappedBy = "person", cascade = CascadeType.ALL)
        private Name name;
    }
    
    public class Name {
        @Id
        @Column(name = "Id")
        private Long id;
    
        @OneToOne
        @PrimaryKeyJoinColumn(name = "Id")
        private Person person;
    
        @Column
        private String first;
        @Column
        private String last;
    }
    
    Person person = new Person();
    person.setName(new Name("first", "last"));
    session.save(person);
    

    我们可以很容易地设置这两个实体。但是我们必须先保存这个人,然后通过hibernate保存这个名字。我们只要救人就很重要了。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Florin    14 年前

    我也有同样的问题。我尝试将mappedby条件移动到“secondary”实体,希望在保存主实体时也保存这个secondary实体。

    保存主实体时生成以下异常(适用于以上示例): org.hibernate.id.identifierGenerationException:调用save():com.my.name之前,必须手动分配此类的ID。

    另外,如果查看由我的配置生成的表,我会发现person表有一个指向name表的id的fk“name”。使用共享主键的整个目的是避免像这样的fk列。

    因此,将mappedby移到辅助表并不是一个解决方案。

    推荐文章