3

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

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

2 回答 2

6

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

至于 Hibernate,它有一个扩展注释来启用外部 ID 生成器。如果您不介意,您可以选择使用它:

  @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;
于 2012-04-10T14:41:30.123 回答
0

对于它的价值,JPA 2.0 添加了一个可用于外键导入的 @MappedBy 注释。从 Christian 的例子开始,从 Ken Chan 的例子开始无聊:

@Id
@Column
private Long personId;

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

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

于 2017-11-17T14:31:32.480 回答