我正在完成一个通过 eclipseLink 连接到 derby 数据库的 GWT 项目,而 ORM 是通过 JPA 完成的。一开始我有一个登录和注册按钮。当我打开一个会话,从 Eclipse 中运行项目时,我注册了一个新用户并使用这个用户登录,一切正常。当我现在退出该会话时,我可以在数据库中看到该用户。当我现在开始一个新会话时,我仍然可以在数据库中看到该用户。当我现在尝试在新会话中登录时,登录按钮会实例化一个新的实体管理器,该管理器第一次再次连接到数据库并运行选择查询,以检查用户,我尝试登录。只要我使用该功能,一切似乎都运行良好,这是我的服务的服务器端实现的一部分。
public Fellow getUser(String username) {
ObjectManager.checkIfOMisOpen();
EntityTransaction tx = ObjectManager.em.getTransaction();
tx.begin();
TypedQuery<Fellow> checkUser = ObjectManager.em.createQuery(
"SELECT m FROM Fellow m WHERE " + "m.username = '" + username
+ "'", Fellow.class);
tx.commit();
List<Fellow> listUser = checkUser.getResultList();
if (listUser.isEmpty())
return null;
return listUser.get(0);
}
该函数检查对象管理器(它是数据库操作的管理器)是否打开,然后尝试通过查询获取用户。由于此功能中的任何原因,项目的所有对象都会被删除......仅当我尝试在新会话中登录时......
有人有建议吗?这是截止日期前的最后几个小时大问题:D 提前致谢
ps:这里是persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="...." transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>class1</class>
<class>class2</class>
<class>class3</class>
<class>class4</class>
<class>class5</class>
<properties>
<property name="javax.persistence.target-database" value="Derby"/>
<property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.url"
value="jdbc:derby:....;create=true"/>
<property name="javax.persistence.jdbc.user" value="..."/>
<property name="javax.persistence.jdbc.password" value="..."/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.logging.level" value="SEVERE"/>
</properties>
</persistence-unit>
</persistence>
第 3 类继承第 4 类,我发现问题只发生在与这些对象的映射关系中......