[英]Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: jpa+springboot
model classes 模型类
@Entity
@Table(name="RequisitionRequest")
public class Requisition {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String requestedPerson;
private String contactDetails;
private String appliedDate;
private String branch;
private String department;
private String status;
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER,mappedBy = "RequisitionRequest")
private List<Nationality> nationality;
//getters and setters
}
class Nationality 国籍
@Entity
@Table(name="nationality")
public class Nationality {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String nationality;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "nationality_id", nullable = false)
private Requisition requisition;
//getters and setters
}
repository classes 储存库类别
@Repository
public interface NationalityRepository extends JpaRepository<Nationality,Long>{
}
@Repository
public interface RequisitionRepository extends JpaRepository<Requisition,Long> {
}
service class 服务等级
@Service
public class RequisitionServiceImpl implements RequisitionService {
@Autowired
RequisitionRepository requisitionRepository;
@Override
public void save(Requisition requisition) {
requisitionRepository.save(requisition);
}
}
controller class 控制器类
@RestController
public class RequisitionController {
@Autowired
RequisitionService requisitionService;
@Autowired
RequisitionRepository requisitionRepository;
@PostMapping("/requisition/")
@CacheEvict(value = "requisitions", allEntries=true)
public ResponseEntity<Requisition> addRequisition(@RequestBody Requisition requisition) {
System.out.print(requisition);
Requisition requisitionR = new Requisition();
Requisition response = new Requisition();
requisitionR.setBranch(requisition.getBranch());
requisitionR.setDepartment(requisition.getDepartment());
requisitionR.setExpectedDateofJoin(requisition.getExpectedDateofJoin());
//requisitionR.setNationality(requisition.getNationality());
requisitionRepository.save(requisitionR);
return new ResponseEntity<Requisition>(response, HttpStatus.OK);
}
i am learning spring boot,just writing sample program to learn spring boot+jpa+one-to-many relation.when execute this above code getting error like 我正在学习Spring Boot,只需编写示例程序即可学习Spring Boot + JPA +一对多关系。
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: officekitRecruitment.model.Nationality.RequisitionRequest in officekitRecruitment.model.Requisition.nationality at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:769) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:719) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1623) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.model 引起原因:org.hibernate.AnnotationException:mappedBy引用了未知的目标实体属性:位于org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinderjava: )〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.cfg.annotations.CollectionBinder $ 1.secondPass(CollectionBinder.java:719)〜[hibernate-core-5.0.12 .org.jar.5.0:12.Final.jar:5.0.12.Final.org.org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.org .hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses InFlightMetadataCollectorImpl.java:1623)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.model .process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata( EntityManagerFactoryBuilderImpl.java:847)〜[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)〜[hibernate -entitymanager-5.0.12.Final.jar:5.0.12.Final]
I tried the solutions already mentionned in this site but it doesn't work for me. 我尝试了此站点中已经提到的解决方案,但对我不起作用。 Can anybody helps me to resolve this issue
谁能帮我解决这个问题
You should refer to the name of the Field in mapped entity on your MappedBy parameter. 您应该在MappedBy参数上引用映射实体中字段的名称。
Like that 像那样
mappedBy = "requisition"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.