package org.optaconf.domain; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import org.optaplanner.core.api.domain.entity.PlanningEntity; import org.optaplanner.core.api.domain.solution.cloner.DeepPlanningClone; import org.optaplanner.core.api.domain.variable.PlanningVariable; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonManagedReference; @PlanningEntity @DeepPlanningClone @Entity(name = "optaconf_talk") public class Talk extends AbstractConferencedPersistable { @NotNull @Size(max = 120) private String title; @NotNull @ManyToOne() @JoinColumn(name = "track_id") private Track track; @PlanningVariable(valueRangeProviderRefs = {"timeslotRange"}) @ManyToOne() @JoinColumn(name = "timeslot_id") @JsonBackReference private Timeslot timeslot; @PlanningVariable(valueRangeProviderRefs = {"roomRange"}) @ManyToOne() @JoinColumn(name = "room_id") @JsonBackReference private Room room; @OneToMany(mappedBy = "talk", cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JsonManagedReference private List<SpeakingRelation> speakingRelationList; public Talk() { } public Talk(Conference conference, String externalId, String title, Track track) { super(conference, externalId); this.title = title; this.track = track; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Track getTrack() { return track; } public void setTrack(Track track) { this.track = track; } public Timeslot getTimeslot() { return timeslot; } public void setTimeslot(Timeslot timeslot) { this.timeslot = timeslot; } public Room getRoom() { return room; } public void setRoom(Room room) { this.room = room; } public List<SpeakingRelation> getSpeakingRelationList() { return speakingRelationList; } public void setSpeakingRelationList(List<SpeakingRelation> speakingRelationList) { this.speakingRelationList = speakingRelationList; } // ************************************************************************ // Real methods // ************************************************************************ }