【问题标题】:Hibernate composite key mapping issueHibernate复合键映射问题
【发布时间】:2009-07-10 18:57:44
【问题描述】:

我正在尝试通过映射表将同一类 (MyData) 的实体相互映射。 MyData 有一个复合主键(id1 和 id2)。当我创建类时(见下文),Hibernate 似乎正在反转 FK 映射的顺序(即 a_id1 指向 b_id2 等......)。这似乎不对。 inverseJoinColumns 是否必须与 joinColums 的顺序相反?我在网上找不到很多使用复合键的示例...

public class MyData {
  // has composite key (id1, id2) 

  // ... //

  @ManyToMany
  @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
  @JoinTable(name = "MyData_foo", 
    joinColumns = {
      @JoinColumn(name = "a_id1"), 
      @JoinColumn(name = "a_id2") 
    }, 
    inverseJoinColumns = {
      @JoinColumn(name = "b_id1"),
      @JoinColumn(name = "b_id2") })
  )
  private Set<MyData> mySet = new HashSet<MyData>();

  // ... //
}


CREATE TABLE `MyData_foo` (
  `b_id2` bigint(20) NOT NULL default '0',
  `b_id1` bigint(20) NOT NULL default '0',
  `a_id2` bigint(20) NOT NULL default '0',
  `a_id1` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`a_id1`,`a_id2`,`b_id1`,`b_id2`),
  KEY `FKCD44188BB2B7A1BE` (`b_id1`,`b_id2`),
  KEY `FKCD44188B7997E326` (`a_id1`,`a_id2`),
  CONSTRAINT `FKCD44188B7997E326` FOREIGN KEY (`a_id1`, `a_id2`) REFERENCES `MyData`  (`b_id2`, `b_id1`),
  CONSTRAINT `FKCD44188BB2B7A1BE` FOREIGN KEY (`b_id1`, `b_id2`) REFERENCES `MyData`  (`a_id2`, `a_id1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您的映射错误。您需要在所有 JoinColumn 注释中添加“referencedColumnName”,例如

    @JoinTable(name = "MyData_foo",
     joinColumns = {
      @JoinColumn(name = "a_id1", referencedColumnName = "id1"), 
      @JoinColumn(name = "a_id2", referencedColumnName = "id2") 
    }, 
    inverseJoinColumns = {
      @JoinColumn(name = "b_id1", referencedColumnName = "id1"),
      @JoinColumn(name = "b_id2", referencedColumnName = "id2")
    })
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 2014-01-19
      • 2011-07-31
      相关资源
      最近更新 更多