Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA:@JoinTable-两列都是主键。。我怎样才能阻止它?_Jpa_Primary Key_One To Many_Jointable - Fatal编程技术网

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不是主关键字。