我有与单向的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;
}