hibernate JPA错误:org.hibernate.hql.internal.ast.QuerySyntaxEx



嗨,我正在学习编写spring web应用程序,但我收到了以下错误:org.hibernate.hql.internal.ast.QuerySyntaxException:用户未映射[SELECT u FROM users u WHERE u.username=:username AND u.password=:password]]有人能帮我解决这个表没有映射的问题吗:

我的JPA配置类

@Configuration
public class JpaConfig {
@Bean
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean emfb  = new LocalContainerEntityManagerFactoryBean();
emfb.setPersistenceXmlLocation("classpath:META-INF/persistence.xml");
emfb.afterPropertiesSet();
return emfb.getObject();
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("org.postgresql.Driver");
ds.setUrl("jdbc:postgresql://localhost:5432/schoolDB");
ds.setUsername("postgres");
ds.setPassword("******");
return ds;
}
}

我的型号类

@Entity
@Table(name ="users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private Integer id;
@Column(name="username")
private String username;
@Column(name="password")
private String password;
public String getUsername() {
return username;
}

存储库配置

@Repository  
public class UserRepository {
@PersistenceUnit(unitName = "myschool")
private EntityManagerFactory emf;
private static Logger logger = LoggerFactory.getLogger(UserRepository.class);
public User checkUser(String username, String password) {
logger.info("********** User Repository ********");
try {  
EntityManager em = emf.createEntityManager();
TypedQuery<User> typedQuery = em.createQuery("SELECT u FROM users u WHERE u.username = :username AND u.password = :password", User.class);
typedQuery.setParameter("username", username);
typedQuery.setParameter("password", password);
return typedQuery.getSingleResult();
} catch (NoResultException nre) {
logger.info("********** User Repository Exception ********");
return null;
}
}

}

我的持久性.xml

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="myschool">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>

<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/schoolDB" />
<property name="javax.persistence.jdbc.user" value="postgres" />
<property name="javax.persistence.jdbc.password" value="******" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect" />
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>

<property name="hibernate.hbm2ddl.auto" value="update"/> <!-- update -->
<property name="hibernate.show_sql" value="true"/> <!-- Show SQL in console -->
<property name="hibernate.format_sql" value="true"/> <!-- Show SQL formatted -->
</properties>

org.hibernate.hql.internal.ast.QuerySyntaxException:用户不是映射

createQuery用于创建JPQL。在JPQL中,应该使用Entity类的名称,而不是表的名称。因此在查询中使用User而不是users

em.createQuery("SELECT u FROM User u WHERE u.username = :username AND u.password = :password", User.class);

最新更新