hibernate:在另一个实体pk中使用复合fk的一部分

k7fdbhmy  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(308)

我对hibernateMap还比较陌生,我试图在类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;

没有Mapcomentario和它在post中的字段,它可以正常工作,但是当我决定Map它时,我得到了这个错误:在@mapsid mapping:idusuario中找不到列引用
它不是在comentario表中找到idusuario列吗?我不想添加它,我可以在mysql中实现连接,但我不知道如何在hibernate中实现

hs1rzwqc

hs1rzwqc1#

@MapsId 注解用于将父实体的主键字段Map到子实体(同名)。在您的情况下,您的父实体中有复合主键,但在子实体中您只希望引用它的一个字段。 PostPK 有两个字段: idPost 以及 idUsuario . 但是在 Comentario 当您指定要在其中提及单个列的多个关系时,初始化 @JoinColumn (它是idpost)并且没有字段 idUsuario 在Map中可用。但根据 @MapsId 注解两个字段( idPost 以及 idUsuario )预计在 Comentario 班级。
因此,在你的情况下 @MapsId 注解不起作用

相关问题