tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
1015
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sebastianb sebastianb ist offline Mitglied Gold
    Registriert seit
    Dec 2009
    Beiträge
    125
    Hallo Zusammen,

    ich habe gerade in kleines Problem mit meinem Hibernate-Mapping und und finde einfach keine passende Lösung.

    Was ich mache will ist ein relativ simples Mapping von 3 Entites.

    Employee <> Project (M:N) => JoinTable EMP_PROJ

    weiterhin habe ich eine Entity Activity, die zu Employee und Project in einer M:1 Verbindung steht. Deshalb wollte ich den ForeignKey von Acitivity ebenfalls mit in die oben genannte Join Tabelle aufnehmen, da eine Activity nur über die Employee - und Project id eindeutig referenziert werden kann.
    Die Join Tabelle sollte nun ein zusammengesetzten PK aus den FKs zu Project und Employee enthalten und zusätzlich ein FK der Activity referenziert. Leider baut mir Hibernate die EMP_PROJ Tabelle aber so, dass der PK aus alle 3 FKs besteht.

    So sollte es jedenfalls aussehen:
    http://blog.sebastianbraun.org/bilder/jointable.png

    Hier noch mein Mapping

    Employee:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    @OneToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "EMP_PROJ", joinColumns = @JoinColumn(name = "EMPLOYEE_ID"), inverseJoinColumns = @JoinColumn(name = "ACTIVITY_ID", nullable = true))
    @Column(nullable = true)
    private Set<Activity> activities;
     
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "EMP_PROJ", joinColumns = @JoinColumn(name = "EMPLOYEE_ID"), inverseJoinColumns = @JoinColumn(name = "PROJECT_ID"))
    private Set<Project> projects;
    Project:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    @OneToMany( fetch = FetchType.LAZY)
    @JoinTable(name = "EMP_PROJ", joinColumns = @JoinColumn(name = "PROJECT_ID"), inverseJoinColumns = @JoinColumn(name = "ACTIVITY_ID", nullable=true))
    @Column(nullable=true)
    private Set<Activity> activities;
       
    @ManyToMany(mappedBy = "projects", fetch = FetchType.LAZY)
    private Set<Employee> employees;

    Activity:
    Code java:
    1
    2
    3
    4
    5
    
    @ManyToOne(fetch = FetchType.LAZY)
    private Project project;
     
    @ManyToOne(fetch = FetchType.LAZY)
    private Employee employee;


    Viele Dank für Eure Hilfe

    Sebastian
     

  2. #2
    Avatar von Sentoo
    Sentoo Sentoo ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Brühl
    Beiträge
    131
    Hallo Sebastian,

    ich würde die beiden Schlüssel mit in die Activity Tabelle nehmen und aus der emp_proj Tabelle entfernen, zumal stell dir folgende Fragen:
    - Wie viele Zeilen enthält die emp_proj Tabelle, wenn du ein Projekt mit einem Mitglied anlegst? 1
    - Wie viele Zeilen enthält sie, nachdem Du 5 Activities angelegt hast? 5
    - Wie viele Zeilen würdest Du bekommen, wenn du nur Projekte und Employees auflöst? Sollte 1 sein, wird aber 5 ergeben ...
    - Warum ist das so?

    Gruß Sen
     

Ähnliche Themen

  1. Hibernate Type Mapping
    Von chaertl im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 02.09.08, 09:55
  2. Hibernate: Mapping v. Beziehungen und was Hibernate daraus macht
    Von DerGrinsemann im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 14.08.08, 12:53
  3. hibernate-mapping Problem
    Von oldboy im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 19.06.08, 10:29
  4. Hibernate-Mapping
    Von splitshade im Forum Java
    Antworten: 0
    Letzter Beitrag: 24.09.07, 14:03
  5. Hibernate Mapping Beispiel?
    Von Romsl im Forum Java
    Antworten: 7
    Letzter Beitrag: 18.05.05, 21:58