首页 > 解决方案 > 使用 MySQL 而不是 H2

问题描述

当我尝试测试一个简单的 REST 服务以输出网页中的用户数量时,它会产生很多错误。我正在使用 MySQL,在控制台中测试 JPA Query 时,我得到了正确的答案。但是当我从网页尝试时,它给出了这个错误:

01:07:43,647 WARN [org.jboss.as.weld](默认任务 1)WFLYWELD0052:使用部署类加载器为模块 org.jboss.jts 加载代理类。包私有访问将不起作用。要解决此问题,模块应声明对 [org.jboss.weld.core, org.jboss.weld.spi] 01:07:43,731 INFO [org.hibernate.hql.internal.QueryTranslatorFactoryInitiator] 的依赖项(默认任务 1)HHH000397 :使用 ASTQueryTranslatorFactory 01:07:43,801 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper](默认任务 1) SQL 错误:42102,SQLState:42S02 01:07:43,802 错误 [org.hibernate.engine.jdbc .spi.SqlExceptionHelper](默认任务 1)未找到表“USERS”;SQL 语句: select count(users0_.id) as col_0_0_ from users users0_ [42102-193] 01:07:43,807 ERROR [io.undertow.request] (default task-1) UT005023:Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 的 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 的 WeldSubclass.countAll$$super(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) 在 org.jboss.weld.interceptor.proxy.TerminalAroundInvokeInvocationContext.proceedInternal(TerminalAroundInvokeInvocationContext.java:51) 在 org.jboss.weld.interceptor.proxy 的 java.lang.reflect.Method.invoke(Method.java:498) .AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:78) 在 com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.invokeInNoTx(TransactionalInterceptorBase.java:195) 在 com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorSupports。doIntercept(TransactionalInterceptorSupports.java:53) 在 com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:88) 在 com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorSupports.intercept(TransactionalInterceptorSupports。 java:47) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang .reflect.Method.invoke(Method.java:498) at org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:73) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke (拦截器方法处理程序。java:84) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56) at org.jboss. .weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79) at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68) at com.oraldveizi.amdproject.repository.UsersRepository$Proxy $jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79) at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68) at com.oraldveizi.amdproject.repository.UsersRepository$代理$jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79) at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68) at com.oraldveizi.amdproject.repository.UsersRepository$代理$$$ WeldSubclass.countAll(Unknown Source) at com.oraldveizi.amdproject.endpoints.UsersEndpoint.countUsers(UsersEndpoint.java:41) at com.oraldveizi.amdproject.endpoints.UsersEndpoint$Proxy$ $$hibernate.loader.Loader.list(Loader.java:2501) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl. java:395) 在 org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220) 在 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1508) 在 org.hibernate.query.internal .AbstractProducedQuery.doList(AbstractProducedQuery.java:1537) at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505) ... 96 更多原因:org.h2.jdbc.JdbcSQLException: Table "USERS"未找到; SQL 语句:select count(users0 org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220) 上 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1508) 上的 QueryTranslatorImpl.list(QueryTranslatorImpl.java:395) .hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537) at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505) ... 96 更多原因:org.h2.jdbc。 JdbcSQLException:未找到表“USERS”;SQL 语句:select count(users0 org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220) 上 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1508) 上的 QueryTranslatorImpl.list(QueryTranslatorImpl.java:395) .hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537) at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505) ... 96 更多原因:org.h2.jdbc。 JdbcSQLException:未找到表“USERS”;SQL 语句:select count(users0 hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505) ... 96 更多原因:org.h2.jdbc.JdbcSQLException:找不到表“USERS”;SQL 语句:select count(users0 hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505) ... 96 更多原因:org.h2.jdbc.JdbcSQLException:找不到表“USERS”;SQL 语句:select count(users0.id) 作为 col_0_0_ 来自用户 users0_ [42102-193] 在 org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 在 org.h2.message.DbException.get(DbException.java:179) 在 org. h2.message.DbException.get(DbException.java:155) 在 org.h2.command.Parser.readTableOrView(Parser.java:5389) 在 org.h2.command.Parser.readTableFilter(Parser.java:1257) 在 org .h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1897) 在 org.h2.command.Parser.parseSelectSimple(Parser.java:2045) 在 org.h2.command.Parser.parseSelectSub(Parser.java:1891) 在org.h2.command.Parser.parseSelectUnion(Parser.java:1709) 在 org.h2.command.Parser.parseSelect(Parser.java:1697) 在 org.h2.command.Parser.parsePrepared(Parser.java:445)在 org.h2.command.Parser.parse(Parser.java:317) 在 org.h2.command.Parser.parse(Parser.java:289)在 org.h2.command.Parser.prepareCommand(Parser.java:254) 在 org.h2.engine.Session.prepareLocal(Session.java:561) 在 org.h2.engine.Session.prepareCommand(Session.java :502) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1203) at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:73) at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java :676) 在 org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnection.prepareStatement(BaseWrapperManagedConnection.java:744) 在 org.jboss.doPrepareStatement(BaseWrapperManagedConnection.java:758)。 jca.adapters.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:459) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl $5。doPrepare(StatementPreparerImpl.java:146) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import javax.transaction.Transactional;

import java.util.List;

import static javax.transaction.Transactional.TxType.REQUIRED;
import static javax.transaction.Transactional.TxType.SUPPORTS;

@Transactional(SUPPORTS)
public class UsersRepository implements EntityInterface<Users, Long> {

@PersistenceContext(name = "projectPU")
private EntityManager entityManager;


public Users find(Long id) {
    return entityManager.find(Users.class, id);
}

public List<Users> findAll() {
    Query query = entityManager.createNativeQuery("SELECT u FROM Users u ORDER BY u.username DESC");
    List<Users> usersList = query.getResultList();
    return usersList;
}


public Long countAll() {
    TypedQuery<Long> query = entityManager.createQuery(
            "SELECT COUNT(u) FROM Users u", Long.class);
    return query.getSingleResult();
}

@Transactional(REQUIRED)
public Users create(Users users) {
    entityManager.persist(users);
    return users;
}

public void delete(Long id) {
    entityManager.remove(entityManager.getReference(Users.class, id));

}



}

这是我的 UserRepository.java,这是 UserEndpoint.java

import javax.inject.Inject;

import javax.transaction.Transactional;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import java.util.List;

import static javax.ws.rs.core.MediaType.TEXT_PLAIN;

@Path("/users")
public class UsersEndpoint {

@Inject
private UsersRepository usersRepository;

public Users find(Long id) {
    return usersRepository.find(id);
}

@GET
@Produces("text/html")
public Response getUsers() {
    List<Users> usersList =  usersRepository.findAll();

    if(usersList.size() == 0)
        return Response.status(Response.Status.NO_CONTENT).build();
    return Response.ok(usersList).build();
}

@GET
@Path("/count")
@Produces(TEXT_PLAIN)
public Response countUsers() {
    Long numberOfUsers = usersRepository.countAll();
    if(numberOfUsers == 0)
        return Response.status(Response.Status.NO_CONTENT).build();
    return Response.ok(numberOfUsers).build();
}

我没有 hibernate.cfg.xml,因为我从配置菜单中插入了数据源。如何更改为使用 MySQL 而不是 H2?

标签: mysqlhibernatejpajakarta-eeh2

解决方案


推荐阅读