반응형
엔티티 관리자를 사용하는 경우 해당 이름에 대해 정의된 쿼리가 없습니다.
다음과 같은 엔티티가 있습니다.
package com.server.models;
@Entity
@Table(name="users")
@NamedQueries({
@NamedQuery(name=User.QUERY_FIND_USER,query="SELECT c FROM user c WHERE c.username = :username")
})
public class User {
public static final String QUERY_FIND_USER = "LoginFindUser";
// ...
}
그리고 Entity Manager(em)를 사용하여 다음 작업을 수행합니다.
package com.server.controllers;
@Service
@Transactional
@RestController
@RequestMapping("/user")
public class LoginController {
@PersistenceContext
private EntityManager em;
// my code
TypedQuery<User> queries = em.createNamedQuery(User.QUERY_FIND_USER,User.class).setParameter("username", username);
List<User> users = queries.getResultList();
}
그러나 다음 오류가 발생합니다.
java.lang.IllegalArgumentException: No query defined for that name [LoginFindUser]
스프링 부트 구성입니다.여기에는 엔티티 검색이 포함되어야 합니다.
package com.server.boot;
@Configuration
@ComponentScan({"com.server"})
@EnableAutoConfiguration
public class Starter {
public static void main(String[] args){
SpringApplication.run(Starter.class,args);
System.out.println("started application");
}
@Bean
public LoginController loginController(){
return new LoginController();
}
@Bean
public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
factory.setEntityManagerFactory(emf);
return factory;
}
}
찾았어요.댓글에 있는 분들 덕분에.
더하다
@EntityScan("com.server.models")
구성 클래스로
그리고 나는 질문 원인에 오류가 있었습니다.user필요한User
좋습니다. 지속성 구성에 문제가 있을 수 있습니다.모델 정의가 모두 별도의 ejb에 있는 경우 persistence-unit의 persistence.xml에 추가해야 합니다.
아래 구성으로 할 수 있습니다.
private static final String[] ENTITYMANAGER_PACKAGES_TO_SCAN = { "a.b.c.entity" };
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setJpaVendorAdapter(vendorAdaptor());
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
entityManagerFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
entityManagerFactoryBean.setJpaProperties(jpaHibernateProperties());
return entityManagerFactoryBean;
}
아래에 표시된 코드 조각을 사용할 수 있습니다.
<property name="packagesToScan" value="com.servers.model" />
더하다
entitymanager.packagesToScan:com.server.models
application.properties 파일로 이동합니다.
언급URL : https://stackoverflow.com/questions/27124427/no-query-defined-for-that-name-when-using-entity-manager
반응형
'programing' 카테고리의 다른 글
| 브라우저 언어 탐지 (0) | 2023.07.12 |
|---|---|
| 스프링 통합 테스트: 기본 리소스 위치를 검색할 수 없습니다. (0) | 2023.07.07 |
| 최신 레코드를 제외한 모든 레코드를 삭제하시겠습니까? (0) | 2023.07.07 |
| 사용자별 gitignore 파일을 만들 수 있습니까? (0) | 2023.07.07 |
| 연속적이지 않은 커밋 두 개를 제거하려면 어떻게 해야 합니까? (0) | 2023.07.07 |