web-dev-qa-db-ja.com

Entity Managerを使用する場合、その名前に対してクエリが定義されていません

次のエンティティがあります。

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;
    }

}
14
mangusbrother

それを見つけた。コメントでみんなに感謝します

追加

@EntityScan("com.server.models")

あなたの構成クラスに

クエリでエラーが発生しましたuserUserである必要があります

14
mangusbrother

さて、これはあなたの永続化設定の問題かもしれません。モデル定義がすべて別のejbにある場合は、必ずpersistence-unitのpersistence.xmlに追加してください。

6
Rasheed

追加

entitymanager.packagesToScan:com.server.models

application.propertiesファイルに追加します。

0

以下に示すこのコードスニペットを使用できます。

<property name="packagesToScan" value="com.servers.model" />
0
Kevin Tomas