什么是JPA相当于Hibernate的外部id生成器?

时间:2012-04-10 14:19:04

标签: hibernate jpa jpa-2.0

什么是JPA相当于Hibernate的外部id生成器?

<id column="PERSON_ID" name="id" type="java.lang.Long">
   <generator class="foreign">
      <param name="property">person</param>
   </generator>
</id>

2 个答案:

答案 0 :(得分:6)

AFAIK,JPA规范没有标准化外来ID生成器。在保存此实例之前,必须以编程方式正确设置PK值。

至于Hibernate,它有an extension annotation来启用foreign ID generator。如果您不介意,可以选择使用它:

  @Id
  @GeneratedValue(generator = "myForeignGenerator")
  @org.hibernate.annotations.GenericGenerator(
        name = "myForeignGenerator",
        strategy = "foreign",
        parameters = @Parameter(name = "property", value = "person")
  )
  @Column(name = "PERSON_ID")
  private Long id;

答案 1 :(得分:0)

值得注意的是,JPA 2.0添加了一个可用于外键导入的@MappedBy注释。从克里斯蒂安的例子开始,并简要地从肯·陈的无聊:

@Id
@Column
private Long personId;

@ManyToOne
@JoinColumn(name = "personId")
@MapsId
private Person person;

我知道这个问题来自很久以前,但是因为我在解决相同的问题然后挖出@MappedBy时偶然发现了它,我想我会把它添加到遇到此问题的任何人身上后面。