2011-07-27 52 views
1

我得到了這種表結構,我們不允許更改,並且在查找Hibernate映射解決方案時遇到問題。Hibernate列同時用作複合主鍵和部分複合外鍵的一部分

表A

a1 (pk) 
a2 

表B

b1 (pk, fk on 'A.a1') 
b2 (pk) 
b3 

表C

c1 (pk, fk on 'B.b1') 
c2 (pk, fk on 'B.b2') 
c3 (pk) 
c4 

表d

d1 (pk) 
d2 (pk, fk on 'A.a1') 
d3 (fk on 'C.c2') 
d4 (fk on 'C.c3') 
d5 

現在,我得到的問題是上塔D2表d的的theb水平,這是複合鍵的一部分,並且也外鍵的表C

上的一部分

在Hibernate中我做了這個

@Embeddable 
public class TableDId { 
    private Long d1; 
    private TableA d2; 

    @Column(name="d1") 
    public Long getD1() { 
     return this.d1; 
    } 

    @ManyToOne 
    @JoinColumn(name="d2") 
    public Long getD2() { 
     return this.d2; 
    } 
    // Setters 
} 


@Entity 
public class TableD { 
    private TableDId id; 
    private TableC tableC; 

    @EmbeddedId @GeneratedValue(strategy = GenerationType.AUTO)  
    public TableDId getId() { 
     return this.id; 
    } 

    @ManyToOne 
    @JoinColumns({ 
     @JoinColumn(name="id.d2", referencedColumnName="c1"), 
     @JoinColumn(name="d3", referencedColumnName="c2"), 
     @JoinColumn(name="d4", referencedColumnName="c3") 
    }) 
    public TableC getTableC() { 
     return tableC; 
    } 

    // Setters 
} 

正如你可以猜測,不工作,我得到了一個Hibernate的錯誤時SA對一個新表D

java.sql.BatchUpdateException: Unknown column 'id.d2' in 'field list' 

任何人都可以提出一個工作解決方案嗎?

非常感謝。

回答

-1

你應該張貼所有註釋類。您是否在所有類別中使用@EmbeddedId或者您還使用IdClass? 您應該查看「衍生標識映射」部分中的JPA 2規範。我估計你需要在關聯上使用@MapsId。或者將關聯註釋放置在關聯上,但這取決於您如何映射其他類。

+0

,這根本不提供解決方案 – Chan

1
@JoinColumn(name="id.d2", referencedColumnName="c1") 

嘗試刪除ID。從映射

@JoinColumn(name="d2", referencedColumnName="c1") 

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html(2.2.6節)

+0

那也行不通; '實體映射中的重複列:TableD列:d2(應該映射爲insert =「false」update =「false」)'並且添加'insert =「false」update =「false」'不會使它工作或者 – BnW

相關問題