Org.hibernate.AnnotationException: Unknown mappedBy at: mdl.Complaint.jobDone, link property unknown: mdl.JobDone.jobDone

I tried to create a one-to-one mapping and save the SQL db using hibernate, but I am running my project. I get the following error:

Initial SessionFactory creation failed.org.hibernate.AnnotationException: Unknown mappedBy in: mdl.Complaint.jobDone, referenced property unknown: mdl.JobDone.jobDone Exception in thread "main" java.lang.ExceptionInInitializerError at config.HibernateUtil.buildSessionFactory(HibernateUtil.java:19) at config.HibernateUtil.<clinit>(HibernateUtil.java:8) at application.JD_Comp.main(JD_Comp.java:22) Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: mdl.Complaint.jobDone, referenced property unknown: mdl.JobDone.jobDone at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:159) at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1689) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1396) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1829) at config.HibernateUtil.buildSessionFactory(HibernateUtil.java:13) ... 2 more 

There is my mapped class:

 @Entity @Table(name = "Complaint", catalog = "jobcard") public class Complaint implements Serializable{ private Integer complaint_id; private String nature; private String instruction; private JobDone jobDone; /** * @return the complaint_id */ @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "complaint_id", unique = true, nullable = false) public Integer getComplaint_id() { return complaint_id; } /** * @param complaint_id the complaint_id to set */ public void setComplaint_id(Integer complaint_id) { this.complaint_id = complaint_id; } /** * @return the nature */ public String getNature() { return nature; } /** * @param nature the nature to set */ public void setNature(String nature) { this.nature = nature; } /** * @return the instruction */ public String getInstruction() { return instruction; } /** * @param instruction the instruction to set */ public void setInstruction(String instruction) { this.instruction = instruction; } /** * @return the jobDone */ @OneToOne(fetch = FetchType.LAZY, mappedBy = "jobDone", cascade = CascadeType.ALL) public JobDone getJobDone() { return jobDone; } /** * @param jobDone the jobDone to set */ public void setJobDone(JobDone jobDone) { this.jobDone = jobDone; } } 

another class:

 @Entity @Table(name = "JobDone", catalog = "jobcard", uniqueConstraints = { @UniqueConstraint(columnNames = "nature"), @UniqueConstraint(columnNames = "amount") }) public class JobDone implements Serializable{ private Integer jobDone_id; private String nature; private Integer amount; private Complaint complaint; /** * @return the jobDone_id */ @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "Complaint")) @Id @GeneratedValue(generator = "generator") @Column(name = "jobDone_id", unique = true, nullable = false) public Integer getJobDone_id() { return jobDone_id; } /** * @param jobDone_id the jobDone_id to set */ public void setJobDone_id(Integer jobDone_id) { this.jobDone_id = jobDone_id; } /** * @return the nature */ public String getNature() { return nature; } /** * @param nature the nature to set */ public void setNature(String nature) { this.nature = nature; } /** * @return the amount */ public Integer getAmount() { return amount; } /** * @param amount the amount to set */ public void setAmount(Integer amount) { this.amount = amount; } /** * @return the complaint */ @OneToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumn public Complaint getComplaint() { return complaint; } /** * @param complaint the complaint to set */ public void setComplaint(Complaint complaint) { this.complaint = complaint; } } 

SQL query:

 CREATE DATABASE jobcard; USE jobcard; CREATE TABLE Complaint( jobNumber varchar(100), complaint_id int(10) primary key NOT NULL AUTO_INCREMENT, nature varchar(200), instruction varchar(200), constraint foreign key(jobNumber) references JobCard(jobNumber) on delete cascade on update cascade ); CREATE TABLE JobDone( complaint_id int(10), jobDone_id int(10) primary key NOT NULL AUTO_INCREMENT, nature varchar(200), amount int, constraint foreign key(complaint_id) references Complaint(complaint_id) on delete cascade on update cascade ); 

And I create a hibernate.cfg.xml file and I matched the fully qualified class name of both classes. why am I getting this error.

Update

Works

Complaint Class:

 @OneToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumn public JobDone getJobDone() { return jobDone; } 

JobDone Class:

 @OneToOne(fetch = FetchType.LAZY, mappedBy = "jobDone", cascade = CascadeType.ALL) public Complaint getComplaint() { return complaint; } 
+5
source share
2 answers

The problem, obviously, is that you do not have the jobDone property in jobDone . You can use this mapping

 public class Compilant { @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) public JobDone getJobDone() { return jobDone; } } 

You will have a foreign key in Complaint before jobDone . And you can remove the Compilant property from jobDone .

If you want to have an association in jobDone with Complaint too (which is not very convenient)

 public class JobDone { @OneToOne(fetch = FetchType.LAZY) public Complaint getComplaint() { return complaint; } } 

If you want to have a foreign key only in jobDone

 public class Compilant { @OneToOne(fetch = FetchType.LAZY, mappedBy = "complaint" cascade = CascadeType.ALL) public JobDone getJobDone() { return jobDone; } } public class JobDone { @OneToOne(fetch = FetchType.LAZY) public Complaint getComplaint() { return complaint; } } 
0
source

This is because you are using jobDone in one place (small j) and JobDone in another place (capital J). That's right and the problem should go.

0
source

Source: https://habr.com/ru/post/1243916/


All Articles