【问题标题】:How to cascade save a simple shared primary key one-to-one mapping in hibernate 3.6hibernate 3.6如何级联保存简单的共享主键一对一映射
【发布时间】:2011-05-08 06:16:45
【问题描述】:

我需要一个简单的休眠示例,该示例与另一个实体具有一对一关系,并且它们都共享主键。我只需要保存自动生成其主键的主实体,而其他依赖实体会自动级联保存。例如:

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保存名称。很重要,我们只需要救人。

【问题讨论】:

    标签: hibernate cascade one-to-one hibernate-mapping shared-primary-key


    【解决方案1】:

    我也有同样的问题。我尝试将 mappedBy 条件移动到“次要”实体,希望当主要实体被保存时,它也会保存这个次要实体。

    保存主实体产生如下异常(改编为上例): org.hibernate.id.IdentifierGenerationException: 必须在调用 save(): com.my.Name 之前手动分配此类的 id。

    此外,如果我查看由我的配置生成的表,我会发现 Person 表有一个 FK“名称”,它指向 Name 表的 id。使用共享主键的全部目的是避免像这样的 FK 列。

    所以将 mappedBy 移动到辅助表不是解决方案。

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2021-05-26
      • 2011-04-30
      • 2014-11-22
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多