java - Hibernate @ManyToMany 与复合键的映射

标签 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 :

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") })

在 setter/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 列的联接表,并且您的列有重复的名称。您实际上正在创建 2 个名为 LSFCF_CODLSC 的列、2 个名为 LSFCF_CODFOR 的列和 2 个名为 LSFCF_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") })

或类似的东西(根据您的命名约定)为每列提供唯一的名称。

关于java - Hibernate @ManyToMany 与复合键的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/197635/

相关文章:

java - Spring 3.1, hibernate 4,SessionFactory

hibernate - 实体错误映射中的另一个重复列

eclipse构建我的Java EE应用程序时的Javascript缩小?

java - 在 JSF/RichFaces `dataTable` 中拥有 boolean 复选框的正确方法是什么?

java - h2 数据库 : Unsupported database file version or invalid file header in file

java - 如何用仿射变换旋转并保持原来的坐标系?

java - Hibernate Annotations,指定要持久化的组件成员

java - 从数据库返回值时数字格式异常(JPA)

java - 无法解析 : com. android.volley :volley:1. 0.0

java - 我可以在同一实例中使用 WebSocketHandler 运行 WebAppContext 吗?