im относительно новый для Hibernate Mappings im, пытающийся достичь этой функциональности между классом Post и Comentario без везения
@Embeddable
public class PostPK implements Serializable {
@Column(name="idPost")
private int postID;
@Column(name="idUsuario")
private int userIDFK;
-------------------------------
@Entity
@Table(name="Post")
public class Post {
@EmbeddedId
private PostPK id;
@ManyToOne
@MapsId(value="userIDFK")
@JoinColumn(name="idUsuario")
private Usuario usuario;
@OneToMany(mappedBy="post")
private List<Comentario> comentarios;
@Column(name="titulo")
private String titulo;
-----------------------------------
@Embeddable
public class ComentarioPK implements Serializable{
@Column(name="idComentario")
private int comentarioId;
@Column(name="idPost")
private int postIdFK;
---------------------------
@Entity
@Table(name="Comentario")
public class Comentario {
@EmbeddedId
private ComentarioPK id;
@ManyToOne
@MapsId("postIdFK")
@JoinColumn(name="idPost",referencedColumnName="idPost")
private Post post;
@Column(name="texto")
private String texto;
без сопоставления comentario и его полей в Post его рабочий режим, но когда я решил сопоставить его, я получаю эту ошибку. Невозможно найти ссылку на столбец в сопоставлении @MapsId: idUsuario
не найти столбец idUsuario в таблице Comentario? Я не хочу добавлять его, я могу достичь объединений в mysql, но я не знаю, как это сделать в Hibernate
Аннотации @MapsId
используются для сопоставления полей первичного ключа родительского объекта с дочерним объектом (с тем же именем). В вашем случае у вас есть составной первичный ключ в родительском объекте, но в дочернем объекте вы хотите ссылаться только на одно его поле. PostPK
имеет два поля: idPost
и idUsuario
. Но в классе Comentario
когда вы указываете отношения ManyToOne, вы указываете один столбец в @JoinColumn
(который является idPost), и никакое поле для idUsuario
не доступно в вашем сопоставлении. Но в соответствии с поведением @MapsId
аннотации как поля (idPost
и idUsuario
), как ожидается, в Comentario
классе.
Таким образом, в вашем случае аннотация @MapsId
не будет работать