Hibernate Zusammengesetzter Schlüssel mit anderen Objekten

Dieses Thema Hibernate - Zusammengesetzter Schlüssel mit anderen Objekten im Forum "Data Tier" wurde erstellt von janus23, 31. Okt. 2014.

Thema: Zusammengesetzter Schlüssel mit anderen Objekten Hallo Leute :) Ich habe folgende Ausgangsituation: Die Klasse Article: @Entity @Table public class Article...

  1. Hallo Leute :)

    Ich habe folgende Ausgangsituation:
    Die Klasse Article:
    Code (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:
    Code (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:
    Code (Java):

    public class PaymentPositionPK implements Serializable{
        protected Article article;
        protected Payment payment;

       

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

    Code (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!
     
  2. Vielleicht hilft dir das Java-Tutorial weiter. Hier klicken --> (Klick)
  3. 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: 5. Nov. 2014
  4. 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
     
  5. Schau dir jetzt hier den Kurs an und lernen Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)