Hibernate Composite主键包含外键,这是其他表主键的子集,如何映射?

时间:2011-06-02 03:07:57

标签: hibernate hibernate-mapping composite-primary-key

方案如下

表A具有复合PK。

Table A 
--------
a1 (pk)
a2 (pk)
a3 (pk)
foo
bar
LastUpdateDate
LastUpdateUser ========

表B也有复合PK,它实际上是A的PK的子集,这里也作为FK工作。没有强制FK约束。

Table B 
-------- a1 (fk,pk) a2 (fk,pk) foo bar LastUpdateDate LastUpdateUser ========

我尝试了几种方法,但没有一种方法可行。谁能告诉一个有效的Hibernate映射解决方案?注释风格更好。

非常感谢。

维夫

1 个答案:

答案 0 :(得分:0)

我可以看到以下设置。虽然上班可能很棘手,但根据我的经验,这是不必要的复杂性。

class A implements Serializable {
   @Id
   private PK id = new PK();
   @Embeddable      
    public static final class PK implements Serializable {
        @ManyToOne 
        @JoinColumns ({
        @JoinColumn(name="A1_COL", referencedColumnName = "id.a1"),
        @JoinColumn(name="A2_COL", referencedColumnName = "id.a2"),

        })
         B b;            
        @Basic String a3;
    }    
 }


class B implements Serializable {
   @Id
   private PK id = new PK();
   @Embeddable      
    public static final class PK implements Serializable {                    
        @Basic String a1;
        @Basic String a2;
        @Basic String a3;
    }    
 }

您应该可以通过

访问
a.getId().getB()

根据需要添加setter / getters。

通常这类问题需要大量的试验和错误,所以不要指望它能立即发挥作用。但这应该为你提供挖掘的方向。一旦确定了最终配置,请将其添加到您的问题中,以便将来有人可以从中受益。