JPA:@JoinTable-两列都是主键。。我怎样才能阻止它?
这是我用来生成联接表的注释JPA:@JoinTable-两列都是主键。。我怎样才能阻止它?,jpa,primary-key,one-to-many,jointable,Jpa,Primary Key,One To Many,Jointable,这是我用来生成联接表的注释 @OneToMany(cascade = CascadeType.ALL) @JoinTable(name = "service_operations", joinColumns = { @JoinColumn(name = "serviceId") }, inverseJoinColumns = { @JoinColumn(name = "operationId") }) public Set<Operation> ge
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "service_operations",
joinColumns = { @JoinColumn(name = "serviceId") },
inverseJoinColumns = { @JoinColumn(name = "operationId") })
public Set<Operation> getOperations() {
return operations;
}
我对此有点困惑。有什么建议吗?我觉得这是正确的。联接表中的每一行都应标识一对工作流/服务项。所以
(工作流id、服务id)
应该是主键。另外,workflow\u id
应该是workflow
表中的外键,service\u id
应该是service
表中的外键
还请注意,a和B之间的一对多关联并不意味着a的实例可以多次具有相同的B实例,而是a的实例可以具有多个不同的B实例。例如,博客
Post
实体可以与标记实体具有一对多关联。这意味着一篇博客Post
P1可以有多个标签Java
,JPA
,JavaEE
,但不能多次有相同的标签。这在我看来是正确的。联接表中的每一行都应标识一对工作流/服务项。所以(工作流id、服务id)
应该是主键。另外,workflow\u id
应该是workflow
表中的外键,service\u id
应该是service
表中的外键
还请注意,a和B之间的一对多关联并不意味着a的实例可以多次具有相同的B实例,而是a的实例可以具有多个不同的B实例。例如,博客Post
实体可以与标记实体具有一对多关联。这意味着博客Post
P1可以有多个标记Java
,JPA
,JavaEE
,但不能多次有相同的标记。我通过添加以下更改修复了我的问题:
我把我的@OneToMany改成了@ManyToMany注释
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "workflow_services",
joinColumns = @JoinColumn(name = "workflow_id"),
inverseJoinColumns = @JoinColumn(name = "service_id"))
public Set<Service> getServices() {
return services;
}
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name=“工作流\服务”,
joinColumns=@JoinColumn(name=“workflow\u id”),
inverseJoinColumns=@JoinColumn(name=“service\u id”))
公共集getServices(){
返回服务;
}
我添加了一组工作流;我的服务对象中的关联
@ManyToMany(mappedBy="services") // map info is in person class
public Set<Workflow> getWorkflows() {
return workflows;
}
@ManyToMany(mappedBy=“services”)//地图信息在person类中
公共集getWorkflows(){
返回工作流;
}
我通过添加以下更改修复了问题:
我把我的@OneToMany改成了@ManyToMany注释
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "workflow_services",
joinColumns = @JoinColumn(name = "workflow_id"),
inverseJoinColumns = @JoinColumn(name = "service_id"))
public Set<Service> getServices() {
return services;
}
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name=“工作流\服务”,
joinColumns=@JoinColumn(name=“workflow\u id”),
inverseJoinColumns=@JoinColumn(name=“service\u id”))
公共集getServices(){
返回服务;
}
我添加了一组工作流;我的服务对象中的关联
@ManyToMany(mappedBy="services") // map info is in person class
public Set<Workflow> getWorkflows() {
return workflows;
}
@ManyToMany(mappedBy=“services”)//地图信息在person类中
公共集getWorkflows(){
返回工作流;
}
贝朗在下面说了些什么,另外:MySQL的descripe
不显示外键;但是workflow\u id
和service\u id
在各自的表中都是FK。此外,JPA在这里正确地在两列上定义了复合主键,即两列都是表PK的一部分,而每一列本身都是FK的(单个部分)。贝朗在下面所说的,加上:MySQL的descripe
不显示外键;但是workflow\u id
和service\u id
在各自的表中都是FK。此外,JPA在此两列上都正确定义了复合主键,即两列都是表PK的一部分,而每列本身都是FK的一部分。感谢您澄清这一点,但我仍然需要回答我的问题。我会转换到@ManyToMany注释还是我必须做些其他事情才能得到一个表,结果是:[1 | 3][1 | 4][2 | 3]
@dreamsinstero[1 | 3]
和[1 | 4]
可以保留在当前表中,因为主键是(1,3)
和(1,4)
,并且它们是唯一的。您可以有任意多个关联:(1,2)
,(1,3)
,(1,4)
,(1,5)
,…我不寻求唯一的服务id。我正在寻找指向同一服务的多个工作流。工作流id列必须保持唯一,但服务id列不得唯一。我是否要使用多对多来获得非唯一的第二个FK列?我相信我想要的是一个工作流\u id+服务\u id组合键,其中服务\u id不是主要的。感谢您澄清这一点,但我仍然需要对我的问题的答案。我会转换到@ManyToMany注释还是我必须做些其他事情才能得到一个表,结果是:[1 | 3][1 | 4][2 | 3]
@dreamsinstero[1 | 3]
和[1 | 4]
可以保留在当前表中,因为主键是(1,3)
和(1,4)
,并且它们是唯一的。您可以有任意多个关联:(1,2)
,(1,3)
,(1,4)
,(1,5)
,…我不寻求唯一的服务id。我正在寻找指向同一服务的多个工作流。工作流id列必须保持唯一,但服务id列不得唯一。我是否要使用多对多来获得非唯一的第二个FK列?我认为我需要的是一个工作流\u id+服务\u id组合键,其中服务\u id不是主关键字。