Hibernate和JPA:如何在String上创建外键约束

时间:2011-02-21 04:07:06

标签: 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;
}

我想确保如果引用的Container不存在,插入Item会失败。我不希望在项目对象(ManyToOne)中填充Container对象,如果可以的话,我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

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

@Column(name="container_guid", 
     columnDefinition = "VARCHAR(255) REFERENCES container(guid)")
private String containerGuid;

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

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

答案 1 :(得分:-3)

Try using below relationship mapping

RelationShip Mapping     @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    @ManyToOne()     @ManyToMany()

<>     @JoinColumn(name =“<>”)