Java 使用3个外键休眠表

Java 使用3个外键休眠表,java,mysql,hibernate,Java,Mysql,Hibernate,我正在尝试将下表映射到一个实体 事件表的映射如下所示: @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer _id; @Column(name = "title") private String _title; @Column(name = "description") private String _description; @Column(name = "l

我正在尝试将下表映射到一个实体

事件表的映射如下所示:

@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer _id;
@Column(name = "title")
private String _title;
@Column(name = "description")
private String _description;
@Column(name = "location")
private String _place;
@Column(name = "start")
private Date _start;
@Column(name = "end")
private Date _stop;
@Column(name = "points")
private int _points;
@Enumerated(EnumType.STRING)
@Column(name = "type")
private EventType _eventtype;

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "event2work2instrumentation", joinColumns = {
        @JoinColumn(name = "event")},
        inverseJoinColumns = {@JoinColumn(name = "work")})
private Set<WorkMapper> _works = new HashSet<>(0);

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "event2work2instrumentation", joinColumns = {
        @JoinColumn(name = "event")},
        inverseJoinColumns = {@JoinColumn(name = "instrumentation")})
private Set<InstrumentationMapper> _instrumentations = new HashSet<>(0);

你有什么想法吗?是否取决于仪器和/或工作的映射?这些类在其映射中没有对event2work2instrumentation的引用。

尝试截断这两个表,然后存储新的FK。当我有一个与对象相关的id作为id不在对象表中时发生了这种情况

解决方案是使用map和MapKeyJoinColumn注释:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "event2work2instrumentation", joinColumns = {
        @JoinColumn(name = "event")},
        inverseJoinColumns = {@JoinColumn(name = "instrumentation")})
@MapKeyJoinColumn(name = "work")
private Map<WorkMapper, InstrumentationMapper> _eventToWorkAndInstrumentationMappers = new HashMap<>();
@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name=“event2work2instrumentation”,joinColumns={
@JoinColumn(name=“event”)},
inverseJoinColumns={@JoinColumn(name=“instrumentation”)}
@MapKeyJoinColumn(name=“工作”)
私有映射_eventToWorkAndInstrumentationMappers=new HashMap();

我不是专家,但您可能需要添加
cascade=CascadeType。将
cascade=CascadeType.ALL
同时插入
@manytomy()
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "event2work2instrumentation", joinColumns = {
        @JoinColumn(name = "event")},
        inverseJoinColumns = {@JoinColumn(name = "instrumentation")})
@MapKeyJoinColumn(name = "work")
private Map<WorkMapper, InstrumentationMapper> _eventToWorkAndInstrumentationMappers = new HashMap<>();