java - 使用 persistence.xml 连接到 MySQL 数据库。为什么 EntityManager 查询返回 null?

标签 java mysql jpa entitymanager apache-tomee

我使用 Tomee 7.0 plus 作为我的服务器。我正在使用 persistence.xml 通过 jdbc:mysql 驱动程序建立到在线 MySQL 数据库的连接。我正在使用从连接接收到的 EntityManager,并将其注入(inject)到我运行查询的类 UserManager 中。 我没有解决方案,为什么我的查询没有命中我数据库中的实际表。我不断收到的错误是空指针。我的 persistence.xml 有问题吗?因为它似乎并没有建立完整的连接......

我没有使用 Maven、Spring 或 Hibernate。我在一个小组项目中,我正在尝试启动并运行这个数据库,非常感谢任何输入或想法为什么我的连接没有建立。

这是 persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
       xmlns="http://java.sun.com/xml/ns/persistence"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
       http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

  <persistence-unit name="UserService" transaction-type="JTA">
    <jta-data-source>userDataSource</jta-data-source>
    <class>edu.neumont.pro280.models.User</class>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://mywebsite.com/trivitup" />
            <property name="javax.persistence.jdbc.user" value="trivitup" />
            <property name="javax.persistence.jdbc.password" value="password" />
    </properties>
  </persistence-unit>
</persistence>

我将连接注入(inject)到我的 UserManager 中,当我打印出 currentUser 时得到 null。 这是我用来注入(inject)连接的 UserManager 类:

@Stateless
@LocalBean
public class UserManager {
    @PersistenceContext(unitName = "UserService")
    EntityManager em;

    public User findUserByUsername(String user) {
    System.out.println("User to find is: " + user);
    TypedQuery<User> query = em.createQuery(
            "SELECT u FROM User u WHERE u.username=:user", User.class);
    query.setParameter("user", user);

    List<User> userList = query.getResultList();
    User returnUser = null;
    System.out.println("list size: " + userList.size());
    if (userList.size() == 1) {
        for (User user1 : userList) {
            returnUser = user1;
        }
    }
    return returnUser;
}

我使用 LoginServlet,如果成功检索到用户,它将对用户进行身份验证。当我打印出 currentUser 的用户名时,下面我得到一个空值。

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String username = (String) req.getParameter("username");
        String password = (String) req.getParameter("password");
        User currentUser = userManager.findUserByUsername(username);
        System.out.println("This is currentUser... "
                + currentUser.getUsername());

    }

感谢您的任何想法或帮助。

最佳答案

所以,这个解决方案很有趣,我仍然没有完全理解它。我的 persistence.xml 的一切都是完全正确的,这是某人连接到 MySQL 数据库所需的确切数据,但仍然无法工作。为了解决这个空指针问题,我不得不从我的 persistence.xml 中提取资源元素并将其提取到另一个名为 resources.xml 的文档中,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <Resource id="userDataSource" type="DataSource">
   JdbcDriver com.mysql.jdbc.Driver
   JdbcUrl jdbc:mysql://mywebsite.com/trivitup
   UserName trivitup
   Password password
 </Resource>
</resources>

然后,我建立了数据库连接。

关于java - 使用 persistence.xml 连接到 MySQL 数据库。为什么 EntityManager 查询返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858751/

相关文章:

java - 主键上的 JPA @AutoGenelated 对嵌套实体使用父序列/自动增量

java - 如何使用 Hibernate 将 `null` 值插入数据库?

java - 遍历LinkedStack并显示整个堆栈

java - 如何从 C++/Qt 调用 QtActivity 中的非静态 Java 方法

java - 如何使用 RSA 私钥解密 JWT

mysql - 'result1' 中的未知列 'field list'

mysql - 在 mysql 中选择当前日期和当前日期后 3 个月之间的日期

php - 多维数组合并

java - select 子句中的 Hibernate Criteria SubSelect

hibernate - JPA/Hibernate 删除实体有时不起作用