Hibernate 和 JPA:如何对字符串进行外键约束

N2O*_*N2O 3 java hibernate jpa

我正在使用 Hibernate 和 JPA。如果我有两个简单的实体:

@Entity
@Table(name = "container")
public class Container {
  @Id
  @Column(name="guid")
  private String guid;
}

@Entity
@Table(name="item")
public class Item {
  @Id
  @Column(name="guid")
  private String guid;

  @Column(name="container_guid")
  private String containerGuid;
}
Run Code Online (Sandbox Code Playgroud)

我想确保如果引用的容器不存在,则插入项目会失败。我不希望在项目对象 (ManyToOne) 中填充 Container 对象,如果可以的话,我将如何执行此操作?

axt*_*avt 6

您可以使用属性声明任意约束columnDefinition

@Column(name="container_guid", 
     columnDefinition = "VARCHAR(255) REFERENCES container(guid)")
private String containerGuid;
Run Code Online (Sandbox Code Playgroud)

但请注意,Hibernate 对这个约束一无所知,因此,例如,它可能无法按照正确的顺序执行插入,等等。

因此,建立关系会更好@ManyToOne。如果您担心Container设置此属性需要额外的 SQL 查询,您可以使用Session.load()/EntityManager.getReference()来获取代理,而无需发出实际查询。