2017-02-04 4 views
0

私はJava JPAを使用して私の最初のAPIプロジェクトに取り組んでいます。 プロジェクトは3つのテーブル(イベント、フェーズ、evt_phases)に基づいています。 evt_phasesはイベントとリンクし、startendという2つのフィールドを含みます。これらのフィールドには、フェーズの開始日(時間)と終了日(時間)が含まれています。JPAを使用してエンティティの別のエンティティにエンティティプロパティを挿入できますか?

enter image description here これは私がデータベーステーブルを作成する方法で、問題は、私は現在、eventphasesの配列を保持する属性が含まれていると私はにevt_phaseテーブルからstartendを含めたい返すAPIを持っているということですphasesの配列。

@Entity() 
public class Event { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public 
    Long id; 

    String name; 

    @Column(name = "short_desc") 
    String short_description; 

    @Column(name = "long_desc") 
    String long_description; 

    @OneToMany() 
    @JoinTable(name = "evt_phase", joinColumns = @JoinColumn(name = "event_id", referencedColumnName = "id"), 
      inverseJoinColumns = @JoinColumn(name = "phase_id", referencedColumnName = "id")) 
    Set<Phase> phases = new HashSet<>(); 

    @OneToMany() 
    @JoinTable(name = "evt_resource", joinColumns = @JoinColumn(name = "event_id", referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "resource_id", referencedColumnName = "id")) 
    Set<Resource> resources = new HashSet<>(); 

    String place; 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setShort_description(String short_description) { 
     this.short_description = short_description; 
    } 

    public String getShort_description() { 
     return short_description; 
    } 

    public void setLong_description(String long_description) { 
     this.long_description = long_description; 
    } 

    public String getLong_description() { 
     return long_description; 
    } 

    public void setPlace(String place) { 
     this.place = place; 
    } 

    public String getPlace() { 
     return place; 
    } 

    public void setPhases(Set<Phase> phases) { 
     this.phases = phases; 
    } 

    public Set<Phase> getPhases() { 
     return phases; 
    } 

    public void setResources(Set<Resource> resources) { 
     this.resources = resources; 
    } 

    public Set<Resource> getResources() { 
     return resources; 
    } 
} 

そしてEvent実体内部EventEventPhaseとの間の関係を導入しないのはなぜ、これは私が

@Entity() 
public class Phase { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    Long id; 

    String name; 

    @Column(name = "color") 
    String backColor; 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setBackColor(String backColor) { 
     this.backColor = backColor; 
    } 

    public String getBackColor() { 
     return backColor; 
    } 
} 

を書いたphaseエンティティは最後に、これは

@Entity() 
@Table(name = "evt_phase") 
public class EventPhase { 

    @Id() 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    Long id; 

    @ManyToOne() 
    private Phase phase; 

    @ManyToOne() 
    private Event event; 

    @Column(name = "start") 
    LocalDateTime startDate; 

    @Column(name = "end") 
    LocalDateTime endDate; 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setPhase(Phase phase) { 
     this.phase = phase; 
    } 

    public Phase getPhase() { 
     return phase; 
    } 

    public void setEvent(Event event) { 
     this.event = event; 
    } 

    public Event getEvent() { 
     return event; 
    } 

    public void setStartDate(LocalDateTime startDate) { 
     this.startDate = startDate; 
    } 

    public LocalDateTime getStartDate() { 
     return startDate; 
    } 

    public void setEndDate(LocalDateTime endDate) { 
     this.endDate = endDate; 
    } 

    public LocalDateTime getEndDate() { 
     return endDate; 
    } 
} 

答えて

0

真ん中のテーブルです。

@Entity 
public class Event { 
    ... 
    @OneToMany(mappedBy = "event") 
    Set<EventPhase> eventPhases = new HashSet<>(); 
} 

Set<Phase>関係を削除して、直接リンクが必要な理由がない限り、上記の関係をEventからPhaseにトラバースする手段として使用することもできます。それは害を与えるものではなく、必要な場合は明らかにショートカットです。

関連する問題