ManyToMany复合键的一部分

时间:2015-10-11 22:46:41

标签: java hibernate

首先:我知道这里有很多类似的问题,但我已经阅读了大部分内容,并且所有人似乎都在解决略有不同的问题,没有人有一个满意的答案......所以我仍然希望有人知道如何处理我的问题...

简单地说,我有一个具有复合键的实体,我希望在此复合键的一部分上加入其他实体的集合。不幸的是,hibernate迫使我将复合键的其他部分包含到连接中,从而导致无用的大型连接表(对于250个不同的值集,> 20m行...)。因此,我想从连接中排除密钥的不必要部分。

实体草图:

public class A {
    @Id
    int i_am_A;

    @OneToMany
    @JoinColumn(referencedColumnName = "i_am_A",name="A_i_am_A")
    Set<AB> abs;
}

public class B {
    @Id
    int i_am_B;

    @Id
    int myLanguage;

    ...
}

public class AB {

    @ManyToOne
    @Id
    A myA;

    @Id
    int myB

    @ManyToMany
    @JoinColum(name="myB")
    Collection<B> bs;

    @Basic 
    String value

}

所以这基本上AB有关系,可以有一定的值,存储在AB中。一个异常现象是,B存在多种语言,AB应该指向所有语言。

有没有人知道如何使用Hibernate进行此操作(如果可能的话,不需要重新构建Db ...我知道可能有更好的设计,但现在这个模式中有很多行......)?

1 个答案:

答案 0 :(得分:0)

根据@ SJuan76评论

更改数据库设计解决了这个问题