2008-10-13 168 views
1

我试图映射2个表之间的多对多的关系,两者都具有复合主键休眠@ManyToMany映射与复合键

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 

因此,在休眠模型映射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") }) 

之前的获得者。 但它不会工作... 错误,试图访问遥远的集合时是:

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映射工作? 如果是这样,我的映射有什么问题? 谢谢你的帮助!

+0

我一直在寻找关于以下页面的信息:http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#entity-hibspec章节:2.2.5.3.3。多对多 还有: http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=78&t=003838 – 2008-10-13 14:03:21

回答

1

问题似乎是,您正在创建一个包含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") }) 

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

+0

表中列的名称是什么在数据库中命名为LSFCFTB? name =“现有列名称”和referencedColumnName =“被引用列的名称” – 2008-10-14 15:40:54