java—如何在hibernate中触发外键关系而不添加reference@entity?

lsmd5eda  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(226)

以下关系创建外键Map

@Entity
public class Department {
   @Id
   private String name;

   //some more fields
}

@Entity
public class Employee {
   @Id
   private long id;

   private String name;
   private String designation;

   @ManyToOne
   @JoinColumn(name = "fk_department_id", foreignKey = @ForeignKey(name="fk_department"))
   private Department department;
}

生成:
…约束 fk_department 外键( fk_department_id )参考文献 department ( name )
问题:如何在hibernate中触发这个约束的创建,而不必创建 Department 实体?
例如只是添加外键 @Id 没有显式实体引用的字段。但在初始创建时仍会触发fk。以下内容当然无效:

@ManyToOne
   @JoinColumn(name = "fk_department_id", foreignKey = @ForeignKey(name="fk_department"))
   private String department;

你明白我的意图了。有可能吗?
(旁注:我对通过启动ddl/sql语句创建外键链接不感兴趣)。

3j86kqsm

3j86kqsm1#

你必须放弃 @ManyToOne 至少,因为那是实体的。
在创建列定义时,应重写列定义以包含外键,从而实现以下操作

@Column(name = "department_id", columnDefinition = "VARCHAR(255), foreign key (department_id) REFERENCES department(name)")
private String department;

现在只定义了一个列和一个约束,但实体之间没有定义关系(据hibernate所知)。
基本上是从hibernate和jpa复制过来的:如何在字符串上设置外键约束,但是很难找到,所以我不打算把它作为一个副本来关闭!;)

相关问题