次のエンティティがあります。
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";
// ...
}
エンティティマネージャー(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に追加してください。
追加
entitymanager.packagesToScan:com.server.models
application.propertiesファイルに追加します。
以下に示すこのコードスニペットを使用できます。
<property name="packagesToScan" value="com.servers.model" />