gpt4 book ai didi

java - Hibernate:在另一个实体PK中使用复合FK的一部分

转载 作者:行者123 更新时间:2023-11-29 17:15:45 35 4
gpt4 key购买 nike

我对 Hibernate Mappings 比较陌生,我试图在 Post 类和 Comentario 类之间实现此功能,但运气不佳

Relational model

@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;

没有在 Post 中映射评论及其字段,它工作正常,但是当我决定映射它时,我收到此错误无法在 @MapsId 映射中找到列引用:idUsuario

是不是在Comentario表中没有找到idUsuario列?我不想添加它,我可以在 mysql 中实现连接,但我不知道如何在 Hibernate 中实现

最佳答案

@MapsId 注解用于将父实体的主键字段与子实体(同名)进行映射。在您的情况下,您的父实体中有复合主键,但在子实体中您只想引用其中的一个字段。PostPK 有两个字段:idPostidUsuario。但是在 Commentario 类中,当您指定 ManyToOne 关系时,您会提到 @JoinColumn 中的单个列(即 idPost),并且没有 idUsuario 的字段在您的映射中可用。但根据 @MapsId 注释的行为,两个字段(idPostidUsuario)都应该出现在 Commentario 类中。

因此,在您的情况下 @MapsId 注释将不起作用

关于java - Hibernate:在另一个实体PK中使用复合FK的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51643558/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com