Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java Hibernate@ManyToMany映射与复合键_Java_Hibernate_Jakarta Ee - Fatal编程技术网

Java Hibernate@ManyToMany映射与复合键

Java Hibernate@ManyToMany映射与复合键,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,我试图映射两个表之间的许多关系,这两个表都有复合主键 LSFOCTB which primary key is composed of : LSFOC_CODSOC,LSFOC_CODLSC,LSFOC_CODFOC LSFORTB which primary key is composed of : LSFOR_CODSOC,LSFOR_CODLSC,LSFOC_CODFOR The table in charge of the ManyToMany relationship is :

我试图映射两个表之间的许多关系,这两个表都有复合主键

LSFOCTB which primary key is composed of : LSFOC_CODSOC,LSFOC_CODLSC,LSFOC_CODFOC

LSFORTB which primary key is composed of : LSFOR_CODSOC,LSFOR_CODLSC,LSFOC_CODFOR

The table in charge of the ManyToMany relationship is :

LSFCFTB, with : LSFCF_CODSOC,LSFCF_CODLSC,LSFCF_CODFOC,LSFCF_CODFOR
因此,在hibernate模型映射LSFOCTB中,我尝试了:

@ManyToMany(targetEntity = package.LSFOCTB.class, cascade = { CascadeType.PERSIST,
            CascadeType.MERGE })
    @JoinTable(name = "LSFCFTB", joinColumns = {
            @JoinColumn(name = "LSFCF_CODLSC", referencedColumnName = "LSFOC_CODLSC"),
            @JoinColumn(name = "LSFCF_CODFOC", referencedColumnName = "LSFOC_CODFOC"),
            @JoinColumn(name = "LSFCF_CODSOC", referencedColumnName = "LSFOC_CODSOC") }, 
    inverseJoinColumns = { @JoinColumn(name = "LSFCF_CODLSC", referencedColumnName = "LSFOR_CODLSC"),
            @JoinColumn(name = "LSFCF_CODFOR", referencedColumnName = "LSFOR_CODFOR"),
            @JoinColumn(name = "LSFCF_CODSOC", referencedColumnName = "LSFOR_CODSOC") })
在getter之前。 但它不会起作用。。。 尝试访问远程集合时出现的错误是:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [beans-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for collection: package.LSFOCTB.distantCollection column: LSFCF_CODLSC
您是否已经设法使hibernate映射适用于多个关系? 如果是,我的映射有什么问题?
谢谢你的帮助

问题似乎在于,您正在创建一个包含6列的联接表,并且列的名称重复。实际上,您正在创建两个名为LSFCF\u CODLSC的列,以及两个名为LSFCF\u CODFOR的列和两个名为LSFCF\u CODSOC的列

我建议你试试这个:

@JoinTable(name = "LSFCFTB", joinColumns = {
                    @JoinColumn(name = "LSFOC_LSFCF_CODLSC", referencedColumnName = "LSFOC_CODLSC"),
                    @JoinColumn(name = "LSFOC_LSFCF_CODFOC", referencedColumnName = "LSFOC_CODFOC"),
                    @JoinColumn(name = "LSFOC_LSFCF_CODSOC", referencedColumnName = "LSFOC_CODSOC") }, 
        inverseJoinColumns = { @JoinColumn(name = "LSFOR_LSFCF_CODLSC", referencedColumnName = "LSFOR_CODLSC"),
                    @JoinColumn(name = "LSFOR_LSFCF_CODFOR", referencedColumnName = "LSFOR_CODFOR"),
                    @JoinColumn(name = "LSFOR_LSFCF_CODSOC", referencedColumnName = "LSFOR_CODSOC") })

或者类似的(根据您的命名约定)为每一列指定一个唯一的名称。

问题似乎是您正在创建一个包含6列的联接表,并且列的名称重复。实际上,您正在创建两个名为LSFCF\u CODLSC的列,以及两个名为LSFCF\u CODFOR的列和两个名为LSFCF\u CODSOC的列

我建议你试试这个:

@JoinTable(name = "LSFCFTB", joinColumns = {
                    @JoinColumn(name = "LSFOC_LSFCF_CODLSC", referencedColumnName = "LSFOC_CODLSC"),
                    @JoinColumn(name = "LSFOC_LSFCF_CODFOC", referencedColumnName = "LSFOC_CODFOC"),
                    @JoinColumn(name = "LSFOC_LSFCF_CODSOC", referencedColumnName = "LSFOC_CODSOC") }, 
        inverseJoinColumns = { @JoinColumn(name = "LSFOR_LSFCF_CODLSC", referencedColumnName = "LSFOR_CODLSC"),
                    @JoinColumn(name = "LSFOR_LSFCF_CODFOR", referencedColumnName = "LSFOR_CODFOR"),
                    @JoinColumn(name = "LSFOR_LSFCF_CODSOC", referencedColumnName = "LSFOR_CODSOC") })

或者类似的东西(根据您的命名约定),为每列指定一个唯一的名称。

我一直在寻找以下页面的信息:第2.2.5.3.3章。多对多,还有:我一直在寻找以下页面上的信息:章节:2.2.5.3.3。多对多以及:数据库中名为LSFCFTB的表中的列的名称是什么?name=“existing column name”和referencedColumnName=“正在引用的列的名称”数据库中名为LSFCFTB的表中的列的名称是什么?name=“现有列名”和referencedColumnName=“被引用列的名称”