我在@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 休眠映射中遇到错误?的主要内容,如果未能解决你的问题,请参考以下文章
注释 ConcurrentHashMap 时,在休眠中“非法尝试将非集合映射为 @OneToMany、@ManyToMany 或 @CollectionOfElements”