Hibernate Zusammengesetzter Schlüssel mit anderen Objekten

janus23

Mitglied
Hallo Leute :)

Ich habe folgende Ausgangsituation:
Die Klasse Article:
Java:
@Entity
@Table
public class Article implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int articleID;
    @Column(nullable = false)
    private String name;
    @Column(nullable = false)
    private BigDecimal price = BigDecimal.ZERO;
//getter, setter, constructor
}

Die Klasse Payment:
Java:
@Table
@Entity
public class Payment implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int paymentID;
    @OneToOne
    private Account account;
    @OneToOne
    private Payee payee;
    @Column(nullable = false)
    private Date date;
    @OneToMany
    private List<PaymentPosition> paymentPositions;
//getter, setter, constructor
}

Jetzt möchte ich gerne mit diesen Klassen einen Primary Key bilden, dazu habe ich mal folgende Klassen angelegt:
Java:
public class PaymentPositionPK implements Serializable{
    protected Article article;
    protected Payment payment;

    

    public PaymentPositionPK() {
        article = new Article();
        payment = new Payment();
    }
//getter,...
}

und:

Java:
@Entity
@Table
@IdClass(PaymentPositionPK.class)
public class PaymentPosition implements Serializable {
    
    @Id
    private Article article;
    @Id
    private Payment payment;
   
   
   @Column(nullable = false)
   private int quantity;
   @OneToOne
   private Category category;
//getter, setter, bla..
}

Lasse ich nun die Tabellen von Hibernate erzeugen, spuckt er mir folgende aus:
Table: payment_paymentposition
Columns:
Payment_paymentID int(11)
paymentPositions_article tinyblob
paymentPositions_payment tinyblob

was mir ziemlich falsch vorkommt.

Wie kann ich das den richtig machen?^^

Danke für die Hilfe!
 

knucki

Aktives Mitglied
Moin, verstehe ich Dich richtig, wenn ich es so interpretiere, dass Du einen "PK" über 2 "Entitäten" erzeugen willst?

Wenn Du sowas schon mit Entitätsobjekten machst, dann musst Du für jede Entität auch die Methoden hashCode und equals überschreiben.
 
Zuletzt bearbeitet:

CptSocket

Aktives Mitglied
Hoi Janus

Ich bin mir ziemlich sicher, dass das keine gute Idee ist :)

Ein Primärschlüssel hat die Aufgabe, eine Entität eindeutig zu identifizieren, soll sich aus möglichst wenigen Attributen zusammen setzen und sich nicht ändern (da sonst die Fremdschlüsselbeziehungen nachgezogen werden müssen). Zudem stelle ich mir Fremdschlüsselbeziehungen auf diesen PK ziemlich kompliziert vor...

Aus welchem Grund willst du den PK so zusammensetzen / welches Problem willst du mit diesem PK lösen?

Ist es möglich, dass du eigentlich eine Entität PaymentPosition benötigst, welche jeweils eine OneToOne-Beziehung zu Artikel und zu Payment hat?


Freundliche Grüsse
CptSocket
 

Ähnliche Java Themen


Oben