JPA how to make composite Foreign Key part of composite Primary Key

前端 未结 2 402
旧巷少年郎
旧巷少年郎 2020-12-01 05:25

I have following tables how can i map them to JPA entities:

TABLE Event {
    EventID
    SourceID
    ....Other event fields
    PK (EventID, SourceID)
}

TA         


        
相关标签:
2条回答
  • 2020-12-01 05:54
    @Entity
    public class Event {
    
        @EmbeddedId
        private EventId id;
    
        @OneToMany(mappedBy = "event")
        private List<Meeting> meetings = new ArrayList<>();
    }
    
    @Embeddable
    public class EventId implements Serializable {
    
        @Column(name = "EventID")
        private Long eventId;
    
        @Column(name = "SourceID")
        private Long sourceId;
    
        //implements equals and hashCode
    }
    
    @Entity
    public class Meeting {
    
        @EmbeddedId
        private MeetingId id; 
    
        @MapsId("eventId")
        @JoinColumns({
            @JoinColumn(name="EventID", referencedColumnName="EventID"),
            @JoinColumn(name="SourceID", referencedColumnName="SourceID")
        })
        @ManyToOne
        private Event event;
    }
    
    @Embeddable
    public class MeetingId implements Serializable {
    
        @Column(name = "MeetingID")
        private Long meetingId;
    
        private EventId eventId;
    
        //implements equals and hashCode
    }
    

    You may want to take a look at a similar question for more details.

    0 讨论(0)
  • 2020-12-01 05:56
    @Embeddable
    public class EventID {
        public int eventID;
        public int sourceID;
    }
    
    @Entity
    public class Event {
        @EmbeddedId
        public EventID id;
    
        @OneToMany(mappedBy="event")
        public Collection<Meeting> meetings;
    }
    
    @Embeddable
    public class MeetingID {
        public EventID eventID; // corresponds to ID type of Event
        public int meetingID;
    }
    
    @Entity
    public class Meeting {
        @EmbeddedId
        public MeetingID id;
    
        @MapsId("eventID")
        @JoinColumns({
            @JoinColumn(name="EventID", referencedColumnName="EventID"),
            @JoinColumn(name="SourceID", referencedColumnName="SourceID")
        })
        @ManyToOne
        public Event event;
    }
    

    Discussed in JPA 2.1 spec, section 2.4.1.

    0 讨论(0)
提交回复
热议问题