Я пытаюсь создать соединение Left Outer в моем проекте с использованием Hibernate и JPA. Однако после того, как я настроил все свои процедуры и написал код для присоединения, он выдает эту ошибку:
Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: com.model.AVSApplication.avsMapped
У меня есть идея, что она говорит мне, но я попытался обойти, но этопо-прежнему продолжает выдавать мне ту же ошибку. Я не верю, что это проблема со стороной базы данных, тогда я считаю, что это проблема либо с контроллером, либо с разделом сущности AVSApplicationn.class
или AVSMapped.class
.
AppRepository:
@Repository
public interface AppRepository extends JpaRepository<AVSMapped, String>{
@Query("SELECT avs.appcode, avs.acro, avs.appname, mapped.gpStatus "
+ "FROM avs LEFT JOIN mapped ON avs.appcode = mapped.appcode")
List<ApplicationDTO> fetchAppDataLeftJoin();
}
JoinQueryService:
public class JoinQueryService {
@Resource
private AppRepository appRepository;
public List<ApplicationDTO> getAppLeftJoin(){
List<ApplicationDTO> list = appRepository.fetchAppDataLeftJoin();
list.forEach(l-> System.out.println(l));
return list;
}
}
Контроллер:
@org.springframework.stereotype.Controller
public class AVSController {
@Autowired
private JoinQueryService joinQueryService;
@GetMapping("/dept")
public ResponseEntity<List<ApplicationDTO>> getAppLeftJoin(){
return new ResponseEntity<List<ApplicationDTO>>(joinQueryService.getAppLeftJoin(), HttpStatus.OK);
}
AVSApplication:
@Entity
@Table(name = "avs")
public class AVSApplication {
@Id
@Column(name = "appcode")
private String appcode;
@Column(name = "acro")
private String acro;
@Column(name = "appname")
private String appname;
@ManyToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "mGpStatus", insertable = false, updatable = false)
@Fetch(FetchMode.JOIN)
private AVSMapped avsMapped;
AVSMapped:
@Entity
@Table(name = "mapped")
public class AVSMapped {
@Id
@Column(name = "mAppcode")
private String mAppcode;
@Column(name = "mAcro")
private String mAcro;
@Column(name = "mAppname")
private String mAppname;
@Column(name = "mGpStatus")
private String mGpStatus;
@OneToMany(targetEntity = AVSApplication.class, mappedBy ="appcode", orphanRemoval = false, fetch = FetchType.LAZY)
private Set<AVSApplication> avsApplication;
ApplicationDTO:
public class ApplicationDTO {
private String dtoAppCode;
private String dtoAcro;
private String dtoAppName;
private String dtoGpStatus;
//Constructor
public ApplicationDTO(String dtoAppCode, String dtoAcro, String dtoAppName, String dtoGpStatus) {
super();
this.dtoAppCode = dtoAppCode;
this.dtoAcro = dtoAcro;
this.dtoAppName = dtoAppName;
this.dtoGpStatus = dtoGpStatus;
//this.dtoLastUpdate = dtoLastUpdate;
}
ОбновленоОшибка:
***************************
APPLICATION FAILED TO START
***************************
Description:
Field joinQueryService in com.controller.AVSController required a bean of type 'com.model.JoinQueryService' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.model.JoinQueryService' in your configuration.