2012-04-11 5 views
0

Ich habe einige Mühe, eine Lösung dafür zu finden, und ich denke, dass es überhaupt nicht möglich sein wird, aber ich werde es noch versuchen hier. So können mit MyISAM (keine FKs) hat die folgenden zwei Tabellen mein Vermächtnis DB-Schema auf MySQL vorgeben:Hibernate mit altem DB-Schema und zusammengesetzten FKs und PKs

TblOrder 
ORDERID (INT) PK 
CUSTOMERID (INT) PK 
REPID (INT)  PK 
ISORDER (INT) PK 
other columns... 

TblOrderPos 
ORDERID (INT) PK 
POSITIONID (INT) PK 
other columns 

Was würde meine Anmerkungen müssen aussehen wie TblOrder zu ermöglichen, einen Satz von TblOrderPos zu haben (identyfied von ORDERID) und TblOrderPos eine private TblOrder-Instanz? Ich habe EmbeddedId-Objekte für beide Tabellen erstellt und jedes Mal, wenn ich versuche, eine Eigenschaft mit @ManyToOne oder @OneToMany zu erstellen, die @JoinColumns überschreibt, beklagt Hibernate, dass die Anzahl der PK-Spalten nicht übereinstimmt (naja, es kann nicht).

Ich hoffe wirklich jemand hat eine Idee oder wenn es überhaupt möglich ist.

----------- ------------ Update

Auf TblOrder

@OneToMany(mappedBy="shoporder") 
@JoinColumn(name="ORDERID") 
public List<Orderposition> getOrderpositions(){ 
    return this.positions; 
} 

public void setOrderPositions(List<Orderposition> positions){ 
    this.positions = positions; 
} 

Auf TblOrderPos

@ManyToOne 
@JoinColumn(name="ORDERID") 
public Shoporder getShoporder(){ 
    return this.shoporder; 
} 

public void setShoporder(Shoporder order){ 
    this.shoporder = order; 
} 

Das ist der Fehler, den ich bekomme: Ein Fremdschlüssel, der TblOrder von TblOrderPos bezieht, hat die falsche Spaltennummer. sollte 4

Antwort

0

Es ist möglich, mit Anmerkungen, weil ich solche Strukturen benutzt habe.

Haben Sie richtig @ManyToOne Annotation verwendet, um mit Tabelle mit zusammengesetztem PK zu verknüpfen? Es sollte so aussehen:

@ManyToOne 
    @JoinColumns({ 
     @JoinColumn(name = "WOJ_ID", referencedColumnName = "WOJ_ID"), 
     @JoinColumn(name = "POW_NR", referencedColumnName = "POW_NR"), 
     }) 

I @IdClass Anmerkung bin mit und bieten Klassen für Composite-PK, einig Beispiel in meiner Antwort auf andere Frage gestellt wird: Why is my EmbeddedId in hibernate not working?