我使用 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/