Spring JPA:当只使用@JoinColumn而不是完整的@ManyToOne时,如何强制进行外键约束验证

uurity8g  于 2023-11-17  发布在  Spring
关注(0)|答案(1)|浏览(170)

例如,考虑下面的代码,当父级不引用子级,但子级可以引用父级的id时,子级不关心实际的父级字段,如名称。

@Entity
class Parent {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column
  String name;
}

@Entity
class Child {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column
  String name;

  // 1. For simplicity, a child can have only one parent
  // 2. Reference just the parent id - don't care about the parent's fields
  @JoinColumn(table = "parent", referencedColumnName = "id")
  long parentId;
}

字符串
所以现在,当我插入一个子对象时,没有先插入一个父对象,我不会得到任何“foreign key constraint violation”或spring定义的“DataIntegrityViolationException”。插入示例:

repo.save(new Child("no_god?"));


也试过foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT)
当我在child上定义一个完整的@ManyToOne(optional = false)+在parent上定义@OneToMany时,它可以工作,但我想使用一个简单的id关系-而不是完整的对象。
如何使外键约束与简单的id引用定义一起工作?

h6my8fg2

h6my8fg21#

如果您只想让JPA创建您的EJB,但不想Map它们,您可以指定它

@Column(columnDefintion="bigint references parent(id)")
    long parentId;

字符串
您需要通过数据库特定的SQL类型和约束语法来指定它。

相关问题