Я создал собственный метод, который применяет аннотацию @Query для извлечения данных из базы данных SQL.Этот метод использует String вместе с Pageable в качестве аргумента.Этот Pageable содержит мою информацию подкачки, такую как запрошенная страница, предел вхождений, направление сортировки и свойство.
Всякий раз, когда мой Pageable передает имя свойства для сортировки, Hibernate использует это же имя для поиска столбца в БД., хотя я аннотировал имя другой колонки на модели.У меня не было этой проблемы с примерами запросов или реализациями производных методов.
Я уже попробовал приведенную ниже конфигурацию, без каких-либо изменений в том, как Hibernate ищет имя столбца.Как я могу заставить Hibernate искать правильное имя столбца в БД?
spring.jpa.hibernate.naming.implicit-
strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-
strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Пример: если в моей странице есть «projectName» в качестве имени свойства для модели, Hibernate будет искать столбец projectName, а не"PROJECT_NAME", как указано на модели.Я использовал Hibernate для некоторых запросов, и эта проблема начала возникать с тех пор, как я начал использовать @ Query.
Запрос:
@Query(value = "SELECT * FROM dbo.DW_DOCUMENT WHERE (USER_CREATED LIKE ?1 OR
PROJECT_NAME LIKE ?1 OR PRIORITY LIKE ?1) AND (DOCUMENT_STATUS = 'Canceled'
OR STATUS = 'Canceled')", nativeQuery = true)
Page<Autopilot_Queue> findQuickCanceledStr(@Param("search") String search,
Pageable page);
Модель:
@PropertySource("classpath:application.properties")
@Entity
@Table(name="DW_DOCUMENT")
@Component
public class Autopilot_Queue {
@Id
@GeneratedValue
@Column(name = "ID")
private Integer id;
@Column(name = "PROJECT_NAME")
private String projectName;
@Column(name = "PRIORITY")
private String priority;
@Column(name = "DOCUMENT_TEMPLATE")
private String template;
@Column(name = "STATUS")
private String processStatus;
@Column(name = "DOCUMENT_LANGUAGE")
private String language;
@Column(name = "DOCUMENT_STATUS")
private String documentStatus;
@Column(name = "USER_CREATED")
private String user;
public Autopilot_Queue() {
}
public Autopilot_Queue(Integer id, String projName, String priority, String statusProcess, String template, String language, String statusDocument, String user) {
super();
this.id = id;
this.projectName = projName;
this.priority = priority;
this.template = template;
this.processStatus = statusProcess;
this.language = language;
this.documentStatus = statusDocument;
this.user = user;
}
public Autopilot_Queue(int id, String projName, String priority, String statusProcess, String template, String language, String statusDocument, String user) {
super();
this.id = id;
this.projectName = projName;
this.priority = priority;
this.template = template;
this.processStatus = statusProcess;
this.language = language;
this.documentStatus = statusDocument;
this.user = user;
}
public Integer getID() {
return id;
}
public void setID(Integer id) {
this.id = id;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getPriority() {
return priority;
}
public void setPriority(String priority) {
this.priority = priority;
}
public String getProcessStatus() {
return processStatus;
}
public void setProcessStatus(String processStatus) {
this.processStatus = processStatus;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getDocumentStatus() {
return documentStatus;
}
public void setDocumentStatus(String documentStatus) {
this.documentStatus = documentStatus;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}