java - 使用 JPA 映射双向一对多 Hibernate 实体

标签 java hibernate jpa spring-boot

我正在尝试在 Hibernate 中映射双向一对多关系。在构建日志中,我收到错误“实体映射中重复列。”

是什么产生了错误?

实体源代码如下。一个有一个复合主键。我正在使用 Lombok 生成 getter 和 setter。

关系:Award(一个)-->AwardReceived(多个)

奖励实体

@Entity
@Table(name = "awards")
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Award implements Serializable {

    @Id
    @Column(name = "award_id")
    private Long awardId;

    @OneToMany(cascade=CascadeType.ALL, mappedBy = "award")
    private Set<AwardReceived> awardsReceived;

    @Column(name = "award_type")
    private String awardType;

    @Column(name = "award")
    private String award;

    @Column(name = "description")
    private String description;

}

获奖实体

@Entity
@Table(name = "awards_received")
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class AwardReceived implements Serializable{

    @EmbeddedId
    @JsonUnwrapped
    private AwardReceivedPk awardReceivedPk;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "award_id")
    private Award award;

    @Column(name = "award_name")
    private String awardName;

    @Column(name = "citation")
    private String citation;

}

获奖PK

@Embeddable
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class AwardReceivedPk implements Serializable{

    @JsonIgnore
    @Column(name = "client_no")
    private String clientNo;

    @Column(name = "award_id")
    private Long awardId;

    @Column(name = "year")
    private Long year;

}

最佳答案

请尝试

@ManyToOne(cascade=CascadeType.ALL)
private Award award;

而不是

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "award_id")
private Award award;

关于java - 使用 JPA 映射双向一对多 Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37306445/

相关文章:

java - 使用 JPA/Hibernate 注释映射字符串列表

java - EclipseLink 1.2 和 BatchFetch

java - 有一个单独的persistence.xml 文件用于测试

java - 具有二元表达式树的访问者设计模式

java - 尽管从同步上下文调用了notifyAll(),但仍存在 IllegalMonitorStateException

java - Java ClassLoader 是否加载内部类?

java - hibernate 继承在父级之后保存子级

onCreate 的 java.lang.NoSuchMethodException

java - 审计模型中的属性变化

java - Hibernate:合并父级后子级 id 为空