2014-11-25 58 views
9

我有以下实体:该名称,没有定义查询使用实体管理器时

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

} 
+0

当你把一个简单的字符串作为名字时它是否工作?如果是的话,这可能是一些评估时间差 – 2014-11-25 11:00:12

+0

不是没有。 – mangusbrother 2014-11-25 11:10:12

+0

然后检查是否在您的持久性单元中定义了User实体。 – 2014-11-25 11:11:24

回答

7

找到它了。由于在评论的家伙

添加

@EntityScan("com.server.models") 

到您的配置类

,我不得不在为User

+0

这个注解是什么版本的持久化? – Jess 2017-08-21 21:54:40

5

好了所需的查询原因user一个错误,这可能是您持久性配置的问题。如果你的模型定义全部在单独的ejb中,请确保将它们添加到persistence-unit中的persistence.xml中