Java JPA/Hibernate多对多与关联列和可空联接列

Java JPA/Hibernate多对多与关联列和可空联接列,java,hibernate,jpa,Java,Hibernate,Jpa,我使用PostgreSQL 9.4.5设置了三个表。删除了一些细节 Table: component id | bigint | not null default nextval('component_seq'::regclass) | Table: file id | bigint | not null default nextval('file_seq'::regclass) | Table: component_file id | bigint | not null

我使用PostgreSQL 9.4.5设置了三个表。删除了一些细节

Table: component
id | bigint | not null default nextval('component_seq'::regclass) |

Table: file
id | bigint | not null default nextval('file_seq'::regclass) |

Table: component_file
id           | bigint | not null default nextval('component_file_seq'::regclass) |
component_id | bigint | not null    |
file_id      | bigint |             |
usage        | text   | not null    |
本质上,它是一种多对多关系,在多对多联接表中有额外的列

  • 一个文件可以关联到一个或多个组件
  • 组件可以与一个或多个文件关联
  • 组件可能不与任何文件关联,这就是为什么组件\u file.file\u id可为空
  • 我使用JPA和Hibernate作为实现提供程序对此进行了建模。为了访问关联的联接表元数据和联接表对象表示(ComponentFile)的两个多工单关联,我使用了一个多工单关联(Component和File)

    为什么会发生这种情况?解决这种关系和持久性的解决方法或替代方法是什么?

    尝试添加:

    cascade = { CascadeType.PERSIST, CascadeType.MERGE } 
    
    对于ComponentFile中的组件和文件@ManyToOne注释。

    尝试添加:

    cascade = { CascadeType.PERSIST, CascadeType.MERGE } 
    

    对于ComponentFile中的Component和File@ManyToOne批注。

    由于您在
    OneToMany
    批注中指定了
    mappedBy
    属性,请确保您也通过调用
    ComponentFile.setComponent(…)或
    ComponentFile.setFile(…)来设置关系的另一端
    每当您将
    组件文件
    添加到
    组件
    文件
    实体中的数组列表时,都应进行适当的操作


    如果您仍然看到相同的错误,或者您已经看到了相同的错误,那么发布实体创建和关联逻辑会有所帮助。

    由于您在
    OneToMany
    注释中指定了
    mappedBy
    属性,请确保您也通过调用
    ComponentFile.setComponent来设置关系的另一端(…)
    ComponentFile.setFile(…)
    只要将
    ComponentFile
    添加到
    Component
    File
    实体中的数组列表中,就可以适当地执行此操作


    如果您仍然看到相同的错误,或者您已经看到了相同的错误,发布实体创建和关联逻辑会有所帮助。

    这是我问题的根本原因…谢谢。这是我问题的根本原因…谢谢。
    cascade = { CascadeType.PERSIST, CascadeType.MERGE }