2016-06-29 3 views
0

Настройка такова: у моего приложения много событий, которые могут произойти. Событие - это всего лишь несколько добавленных полей и EventCode, которые содержат некоторую информацию. В основном события - это таблица соединений с несколькими добавленными сведениями.Unipirectional OneToMany Hibernate без дополнительной таблицы соединений

Я хочу, чтобы не создавать таблицу ApplicationId и EventId. Только, кажется, не нужен

ошибки я получаю

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]) 

Применения (Много удалена, но это где проблема)

@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; 
    } 
} 

События

@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 
} 

ответ

1

Это сопоставление не имеет смысла: вы используете таблицу ApplicationEvent в качестве таблицы соединений между Application and Applicati OnEvent.

Просто удалите applicationId (так как этот столбец является один материализации ассоциацию OneToMany, т.е. столбцу соединения) из ApplicationEntity и использовать

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

Это была глупая ошибка с моей стороны спасибо за уловом. С тех пор я пошел по другому пути, хотя это противоречило моему заявлению о проблеме. Приложение необходимо для событий. – nerdlyist

Смежные вопросы