1

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

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保存名称。我们只需要救人,这一点非常重要。

4

1 回答 1

0

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

保存主要实体产生了以下异常(适应上面的例子):org.hibernate.id.IdentifierGenerationException:这个类的ids必须在调用save()之前手动分配:com.my.Name。

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

因此将 mappedBy 移动到辅助表不是解决方案。

于 2010-11-11T04:31:42.557 回答