我在@OneToMany 休眠映射中遇到错误?

Posted

技术标签:

【中文标题】我在@OneToMany 休眠映射中遇到错误?【英文标题】:I'm getting error in @OneToMany hibernate mapping? 【发布时间】:2017-03-21 21:11:52 【问题描述】:

我试图在两个类之间建立一对多连接,但我收到此错误org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany

这是我的代码,

Job.java

@OneToMany
@JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)

private Set<JobCostSplit> jobCostSplit;

JobCostSplit.java

@Column(name = "job_id")
private Long jobId;

@JsonIgnore
@OneToMany
@JoinColumn(name = "job_id", referencedColumnName = "id", insertable = false, updatable = false)
private Job job;

【问题讨论】:

【参考方案1】:

您必须将 JobCostSplit 中的字段注释为 @ManyToOne

 @ManyToOne
 private Job job

【讨论】:

【参考方案2】:

您使用@OneToMany 注释您的Job。意味着您将在Job 上拥有一个属性,在JobCostSplit 上拥有更多属性。

所以如果你想拥有一个Job 和更多JobCostSplit,你必须这样设置:

@ManyToOne
@JoinColumn(name = "job_id", referencedColumnName = "id", insertable = false, updatable = false)
private Job job;

【讨论】:

【参考方案3】:

首先你需要写

@OneToMany(fetch = FetchType.LAZY, mappedBy = "job")
private Set<JobCostSplit> jobCostSplit= new HashSet<JobCostSplit>();

在 Job.java 中,然后添加

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="jobId",nullable=false)
private Job job;

在 JobCostSplit.java 中

【讨论】:

【参考方案4】:

在 job.java 中将 @OneToMany 替换为 @ManyToOne

【讨论】:

以上是关于我在@OneToMany 休眠映射中遇到错误?的主要内容,如果未能解决你的问题,请参考以下文章

@OneToMany 映射休眠中的集合

JPA(休眠)映射OneToMany不正确?

休眠:覆盖(实体)超类的 OneToMany 映射字段?

注释 ConcurrentHashMap 时,在休眠中“非法尝试将非集合映射为 @OneToMany、@ManyToMany 或 @CollectionOfElements”

无法在休眠中删除 OneToMany 关系的实例

您如何在休眠条件中订购 oneToMany 连接表