如何使用休眠将其他实体映射到ManyToMany关系表

时间:2018-08-15 20:17:32

标签: hibernate annotations many-to-many

我有与单向的manyToMany映射的“事件”实体和“公共用户”实体

@Entity
public class Event implements Serializable {
    @ManyToMany
    private Set<PublicUser> actualVisitors = new HashSet<>();
}

@Entity
public class PublicUser {}

我想要的是仅将此映射用于实际的访客的读取。 以防止在保存没有通过REST发送的ActualVisitors属性的事件时清空EmptyVisitors集合。 但是,我想继续映射以读取带有事件的actualVisitors,但使其变为只读。

要编辑此连接,我想将一个单独的实体映射到联接表“ event_actual_visitors”。

@Entity
public class EventActualVisitors {

     @EmbeddedId
     @AttributeOverrides({
            @AttributeOverride(name = "username", column = @Column(name = "actual_visitors_username")),
     })
     EventPublicUserId eventPublicUserId;
}

在这种情况下,我将使用EventActualVisitors实体将访问者添加到事件中。

不幸的是,当我尝试运行spring boot应用程序时,它会在hibernat启动时触发异常。

原因:org.hibernate.tool.schema.spi.SchemaManagementException:导出标识符[event_actual_visitors]遇到了不止一次。

所以问题是: 是否可以为多对多联接表创建实体?但保留@ManyToMany批注,而不是两个@oneToMany @manyToOne。

如果需要,这里是EventPublicUserId的来源:

@Embeddable
public class EventPublicUserId implements Serializable {

    @Column(name = "event_id")
    Long eventId;

    String username;

}

0 个答案:

没有答案