使用实体管理器时,没有为该名称定义查询

时间:2014-11-25 10:39:43

标签: java sql spring hibernate spring-boot

我有以下实体:

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]

这是我的spring-boot配置。这应该包括扫描实体。

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

}

5 个答案:

答案 0 :(得分:13)

找到它。感谢评论中的人

添加

@EntityScan("com.server.models")

到您的配置类

我在查询中遇到错误user需要User

答案 1 :(得分:6)

好的,这可能是您持久性配置的问题。如果您的模型定义都在一个单独的ejb中,请确保将它们添加到persistence-unit中的persistence.xml中

答案 2 :(得分:0)

您可以使用下面显示的此代码段。

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

答案 3 :(得分:0)

添加

  

entitymanager.packagesToScan:com.server.models

到您的application.properties文件。

答案 4 :(得分:0)

您可以通过以下配置进行操作。

Rec1..3..A1B1C1A2B2C2A3B3C3
Rec2..2..A1B1C1A2B2C2