2016-06-29 20 views
0

Das Setup ist dies: Meine Anwendung hat viele Ereignisse, die passieren können. Ein Event sind nur ein paar hinzugefügte Felder und ein EventCode mit einigen Informationen. Im Grunde ist Events eine Join-Tabelle mit einigen hinzugefügten Informationen.Unidirektional OneToMany Ruhezustand ohne eine zusätzliche Join-Tabelle

Ich möchte vermeiden, eine Tabelle von ApplicationId und EventId zu erstellen. einfach nicht

Der Fehler benötigt scheinen erhalte ich

Caused by: org.hibernate.MappingException: Foreign key (FK_157jxjblselu4urv8c0kqee6l:ApplicationEvent [applicationEvents_id])) must have same number of columns as the referenced primary key (ApplicationEvent [Application_id,applicationEvents_id]) 

Applikation (Eine Menge entfernt, aber das ist, wo das Problem ist)

@Entity 
@Table 
public class Application { 
    //Lots of other stuff 
    private Set<ApplicationEvent> applicationEvents = new LinkedHashSet<ApplicationEvent>(); 

    @OneToMany 
    @JoinTable(name="ApplicationEvent") 
    public Set<ApplicationEvent> getApplicationEvents() { 
     return applicationEvents; 
    } 

    public void setApplicationEvents(Set<ApplicationEvent> applicationEvents) { 
     this.applicationEvents = applicationEvents; 
    } 
} 

Event

@Entity 
@Table 
public class ApplicationEvent { 

    private Long id; 
    private Long applicationId; 
    private EventCode eventCode; 
    private Boolean acknowledge; 
    private int sequence; 


    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    public Long getId() { 
     return id; 
    } 

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

    @Column 
    public Long getApplicationId() { 
     return applicationId; 
    } 

    public void setApplicationId(Long applicationId) { 
     this.applicationId = applicationId; 
    } 

    @OneToOne 
    @JoinColumn(name="EventCodeId") 
    public EventCode getEventCode() { 
     return eventCode; 
    } 

    public void setEventCode(EventCode eventCode) { 
     this.eventCode = eventCode; 
    } 

    @Column 
    public Boolean getAcknowledge() { 
     return acknowledge; 
    } 

    public void setAcknowledge(Boolean acknowledge) { 
     this.acknowledge = acknowledge; 
    } 

    @Column 
    public int getSequence() { 
     return sequence; 
    } 

    public void setSequence(int sequence) { 
     this.sequence = sequence; 
    } 

//Some overriden methods 
} 

Antwort

1

Diese Zuordnung ist nicht sinnvoll: Sie verwenden die Tabelle ApplicationEvent als Join-Tabelle zwischen Application und Applicati Ein Ereignis.

Entfernen Sie einfach applicationId (da diese Spalte ist derjenige, der die OneToMany Vereinigung materialisieren, das heißt die Join-Spalte) aus den ApplicationEntity, und verwenden Sie

@OneToMany 
@JoinColumn(name = "applicationId") 
+0

dass ein stummen Fehler von mir vielen Dank für den Fang war. Seitdem bin ich einen anderen Weg gegangen, der meiner Problemstellung entgegenging. Anwendung wird für Ereignisse benötigt, die angezeigt werden. – nerdlyist