【发布时间】:2020-04-21 20:23:02
【问题描述】:
在我的应用程序中,我有 3 个核心类,如下所述。
public class Semana {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Integer series;
private String observacao;
private Integer ordenacao;
@OneToMany(mappedBy = "semana")
@JsonBackReference
@OrderBy("ordenacao asc ")
private List<TreinoOrdenado> treinoOrdenados;
}
public class TreinoOrdenado {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "id_semana")
private Semana semana;
@ManyToOne
@JoinColumn(name = "id_treino")
private Treino treino; // can be repeated in the database but with different "ordenacao"
private Integer ordenacao;
}
@Table(name = "exercicio_ordenado")
public class ExercicioOrdenado {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "id_treino")
@JsonBackReference
@ToString.Exclude
private Treino treino;
@ManyToOne
@JoinColumn(name = "id_exercicio")
private Exercicio exercicio;
private Integer ordenacao;
@ManyToOne
@JoinTable(name = "parametro")
private Parametro parametro;
}
而这个 Parametro 类是这 3 个类之间的关系。
public class Parametro {
@EmbeddedId
private ParametroId parametroId = new ParametroId();
@MapsId("semana")
@OneToOne
@JoinColumn(name = "semana_id")
private Semana semana;
@MapsId("treino")
@OneToOne
@JoinColumn(name = "treino_id")
private TreinoOrdenado treino;
@MapsId("exercicio")
@OneToOne
@JoinColumn(name = "exercicio_id")
private ExercicioOrdenado exercicio;
private Integer series;
private String repeticoes;
private String observacao;
}
public class ParametroId implements Serializable {
@Column(name = "semana_id")
private Long semana;
@Column(name = "treino_id")
private Long treino;
@Column(name = "exercicio_id")
private Long exercicio;
}
所以,这是我的问题。我希望能够从它的父类 ExercicioOrdenado 访问 Parametro,但是为了在数据库中区分,Parametro 类需要来自其他两个的引用(Semana , TreinoOrdenado)。
使用我当前的映射,我得到了这个错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Foreign key (FK73ewcy2r50kw71o4he51dkolv:parametro
[parametro_exercicio_id,parametro_semana_id,parametro_treino_id])) must have same number of columns as the referenced primary key (parametro [id])
我可以通过以下方式将参数保存在数据库中:
parametros.setSemana(semana);
parametros.setExercicio(exercicioOrdenado);
parametros.setTreino(treinoOrdenado);
parametroRepository.save(parametros);
但我无法使用映射从 ExercicioOrdenado 检索。
我不知道这样做的正确方法。
【问题讨论】: